У меня есть метод, следующий Runnable.run():Java ThreadPoolExecutor релиз нить нить бассейн
public void run() {
calculateStuff();
boolean ioSuccesful = IOforThisRunnable();
while(!ioSuccesful) {
Thread.sleep(500); // alternative?
boolean ioSuccesful = IOforThisRunnable();
}
}
Я хочу, чтобы выполнить этот код в ThreadPoolExecutor с максимальным числом потоков.
Теперь мой вопрос:
Пусть мой ThreadPool состоит из 5 нитей. В текущем примере 5 runnables блокируют выполнение для любых дополнительных потоков, поскольку Thread.sleep() не освобождает поток ?! (если IO не является успешным)
Есть ли способ освободить поток вместо Thread.sleep(), чтобы другие runnables могли запускаться, пока другой ожидает ввода-вывода?
Так что в худшем случае все runnables будут сидеть в цикле?
Знаете ли вы, может ли это быть достигнуто при использовании базовой библиотеки в java или scala? – eclipse