Я начинаю пару потоков, но у меня нет ссылок на остановку с помощью сигнализации или чего-то еще.
Например, я не могу передать переменную типа running=false
для этих потоков, потому что у меня нет их ссылок, но их имена.
Я использую ThreadGroup
, и всегда имею ссылку на него. Поэтому я могу сделать что-то подобное. Кажется, это не работает.
Thread[] threads = new Thread[threadGroup.activeCount()];
int count = threadGroup.enumerate(threads);
for(int i = 0; i < count; i++){
threads[i].interrupt();
}
Это образец моего потока.
public void run{
try{
//myDAO.getRecords();
//this takes 30seconds to 60
//returns about 3 millions of records
}catch(Exception e){
//log
}
}
Когда этот поток выполняется, я хочу остановить его посередине. В любом случае выполняется запрос базы данных, но я хочу прекратить получать результаты.
Тем не менее я получаю результаты, даже звоню interrupt()
.
Есть ли другие способы сделать это ИЛИ я сделал что-то неправильно? В конечном итоге задача состоит в том, чтобы отменить длинный SQL-запрос с Java.