У меня есть основной поток с методом «start». Этот метод запускает другой поток, который выполняет долгую работу. Метод «start» может быть вызван из других потоков. Как избежать создания новых потоков в методе «запуска», если у вас уже есть один и не блокировать основной поток? Я пытаюсь использовать singleThreadExecutor, но он ставит задачи в очередь.java: не начинайте новую нить при текущем состоянии
код: Метод Начало:
public void start(){
// need only one active thread
// if thread alive, avoid to start another
t = new Thread(new Runnable() {
public void run() {
try {
Thread.currentThread().sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t.start();
}
Простой тест
for (int i = 0; i < 100; i++) {
Thread r = new Thread(new Runnable() {
public void run() {
Helper.getInstance().start();
}
});
r.start();
}
Использовать пул потоков размером 1 –
Итак, вы хотите поставить в очередь второе задание, если поток уже запущен, или просто игнорировать его? – Thilo
SingleThreadExecutor не ставит в очередь потоки. Он ставит задачи (однако в вашем случае вы, вероятно, ошибочно сделали свои задачи в потоки). – Kayaman