Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Приостановка\Закрытие потока другим потоком / 5 сообщений из 5, страница 1 из 1
28.02.2012, 18:26:14
    #37682964
krab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приостановка\Закрытие потока другим потоком
Здравствуйте.

Три кнопки "запуск", "остановка" и "возобновление" сервера.
Как можно это реализовать без использования устаревших методов t.suspend() и t.resume() ?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
 t = new ThreadServer();

       buttonStart.addActionListener(new ActionListener(){

                @Override
                public void actionPerformed(ActionEvent e) {
                        t.start();
                }
            });

        buttonStop.addActionListener(new ActionListener(){

                @Override
                public void actionPerformed(ActionEvent e) {
                    t.suspend();
                }
            });

        resume.addActionListener(new ActionListener(){
                @Override
                public void actionPerformed(ActionEvent e) {
                    t.resume();
                }
            });

    private class ThreadServer extends Thread{
        @Override
        public void run() {
      //  запускается бесконечный цикл для прослушивания клиентов
        new ChatServer();    
        }
    }



Заранее спасибо
...
Рейтинг: 0 / 0
28.02.2012, 18:46:28
    #37683002
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приостановка\Закрытие потока другим потоком
В принципе никак. Но возможно вам подойдет такое решение -

В потоке завести поле isRunned, по клику на resume и suspend кнопкам устанавливать или сбрасывать этот флаг, внутри метода run обрамить всю работу конструкцией вида :

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public void run(){
     for(;;){
          if(isRunned){
               //continue to work
          }else{
             //a тут можете вызвать Thread.sleep  или wait();
          }
    }
}
...
Рейтинг: 0 / 0
28.02.2012, 18:50:04
    #37683008
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приостановка\Закрытие потока другим потоком
цикл не обязательно делать бесконечным.
в JavaDoc почитайте почему эти методы пометили как deprecated.
рассмотрите interrupt() в качестве альтернативы
...
Рейтинг: 0 / 0
28.02.2012, 18:51:51
    #37683012
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приостановка\Закрытие потока другим потоком
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
t = new ThreadServer();

       buttonStart.addActionListener(new ActionListener(){

                @Override
                public void actionPerformed(ActionEvent e) {
                        t.start();
                }
            });

        buttonStop.addActionListener(new ActionListener(){

                @Override
                public void actionPerformed(ActionEvent e) {
                    t.suspendThread();
                }
            });

        resume.addActionListener(new ActionListener(){
                @Override
                public void actionPerformed(ActionEvent e) {
                    t.resumeThread();
                }
            });

    private class ThreadServer extends Thread{
        private boolean volatile isRunned;
        private Lock serverLock;
        private Condition readyoRunCondition = serverLock.newCondition();
        @Override
        public void run() {
       for(;;){
          if(isRunned){
               //continue to work new ChatServer();    
          }else{
            readyoRunCondition.await();
          }
    }

     public void suspendThread(){
           isRunned = false;
    }

public void resumeThread(){
      isRunned = false;
      readyoRunCondition.notifyAll();
}
    }
...
Рейтинг: 0 / 0
28.02.2012, 23:27:24
    #37683336
krab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приостановка\Закрытие потока другим потоком
Спасибо
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Приостановка\Закрытие потока другим потоком / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]