powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / потоки
8 сообщений из 8, страница 1 из 1
потоки
    #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
потоки
    #38787211
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174,

Во второй метод прокинуть ссылки на потоки (Список потоков или на ThreadGroup) и сделать Thread.stop()/ThreadGroup.stop().
...
Рейтинг: 0 / 0
потоки
    #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
потоки
    #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
потоки
    #38787246
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Чуть не забыл. Для Spring пример практически идентичен с точностью до пары аннотаций.
...
Рейтинг: 0 / 0
потоки
    #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
потоки
    #38787260
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
no56892,
спасибо :) надо было просто инициализировать ThreadGroup как поле класса, а не в методе,

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



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

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


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