Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / потоки / 8 сообщений из 8, страница 1 из 1
25.10.2014, 14:03
    #38787206
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
потоки
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
method_1(){
  Task tsk = new Task(); // impl Runnable	
  for (int i = 0; i < 5; i++) {
    new Thread(tsk ).start();
  }
}

method_2() {
   // как остановить все потоки из первого метода?
}
...
Рейтинг: 0 / 0
25.10.2014, 14:37
    #38787211
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
потоки
rema174,

Во второй метод прокинуть ссылки на потоки (Список потоков или на ThreadGroup) и сделать Thread.stop()/ThreadGroup.stop().
...
Рейтинг: 0 / 0
25.10.2014, 15:16
    #38787223
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
потоки
no56892,

не работает
я использую рест+джерси и делаю tsk как поле класса и инициализирую его перед циклом.
когда во втором методе обращаюсь к tsk:

авторcom.sun.jersey.spi.container.ContainerResponse mapMappableContainerException
SEVERE: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container
java.lang.NullPointerException
at com.ClassName.methodFromTaskClass(ClassName.java:[lineNumber])

где, lineNumber - строка где вызываю метод из tsk
...
Рейтинг: 0 / 0
25.10.2014, 16:06
    #38787243
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
потоки
rema174я использую рест+джерсиА может не надо низкоуровневые потоки использовать?
В J2EE делаем так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
@SessionScoped
public class AsyncController implements Serializable {

    private Collection<Future> futures;
    @EJB
    private AsyncExecutor executor;

    public void startTasks() throws InterruptedException {
        futures = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            Future<Integer> future = executor.execute(i);
            futures.add(future);
        }
    }
    
    public void interrupt() {
        for (Future future : futures) {
            future.cancel(true);
        }
    }
}

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@Stateless
public class AsyncExecutor {

    @Asynchronous
    public Future<Integer> execute(Integer i) throws InterruptedException {
        // для тестирования
        Thread.sleep(10000);
        return new AsyncResult<>(i);
    }
}
...
Рейтинг: 0 / 0
25.10.2014, 16:09
    #38787246
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
потоки
Чуть не забыл. Для Spring пример практически идентичен с точностью до пары аннотаций.
...
Рейтинг: 0 / 0
25.10.2014, 16:16
    #38787251
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
потоки
rema174,
Код: 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.
public class Init {

	ThreadGroup tgr = new ThreadGroup(null);
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Init().go();	
	}
	
	public void go(){
		method1();
		method2();		
	}
	
	public void method1(){

		  for (int i = 0; i < 5; i++) {
		    new Thread(tgr, new Runnable(){
				@Override
				public void run() {
					// TODO Auto-generated method stub
					while(true){
						System.out.println("hello "+ this);
						try {
							Thread.sleep(500);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
				}		    	
		    }).start();
		  }		
	}
	
	@SuppressWarnings("deprecation")
	public void method2(){
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		tgr.stop();
	}
}
...
Рейтинг: 0 / 0
25.10.2014, 16:48
    #38787260
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
потоки
no56892,
спасибо :) надо было просто инициализировать ThreadGroup как поле класса, а не в методе,

кстати почему так, method_1 вызывался же первым значит значит и переменная должна быть инициализирована после вызова этого метода??? или в джерси это не так работает?



WGA, спасибо, не хотелось усложнять/утяжелять с JEE
...
Рейтинг: 0 / 0
26.10.2014, 01:25
    #38787438
YamahaR1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
потоки
no56892,

stop уже идет как deprecated, почему вы не используете Tread.interrupt()?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / потоки / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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