У меня возникла концептуальная проблема в понимании работы fixedthreadpool службы-исполнителя.
Предположим, что у меня есть фиксированный поток потоков из n потоков, и я отправляю несколько задач этой службе. Теперь, если рабочий доступен, он выполняет поставленную задачу, а другие отправленные задачи ждут в очереди до тех пор, пока работник не станет свободным.
Мой вопрос: когда мы рассматриваем рабочего как свободную рабочую нить?
Рассматриваем ли рабочий поток бесплатно, как только он отправляет задание независимо от завершения задачи, или мы рассматриваем рабочий поток занятым до тех пор, пока выполняется поставленная задача.
Пусть говорят, что у нас есть рабочий поток W1 в пуле, и задача Op1 представляется исполнителю.
W1 запускает Op1 в момент T1, и через некоторое время Op1 завершит свое исполнение в момент T3. Здесь T3> T1
Теперь мы рассматриваем W1 как свободный, как только он запускает Op1 в момент T1, или считается занятым и будет свободным в момент T3.
Заранее спасибо !!
Рабочий поток свободен, когда он takes
ИНГ из очереди. Любой рабочий поток снимает очередь, когда она больше не выполняет задачу. Таким образом, это будет выглядеть примерно так:
private final BlockingQueue<Runnable> workQueue;
class WorkerThread {
public void run(){
while(true){
Runnable r = workQueue.take(); // worker thread is 'free'
r.run(); // worker thread is busy
}
}
}
Поэтому, чтобы ответить на ваш вопрос, конкретный рабочий поток является бесплатным, когда он не выполняет задачу, отправленную службе.
Ну его очень простые..ты начинают
Теперь перебираем пул потоков: a. Комбинированием пула потоков из внутренней очереди может быть arrayblockqueue/linkedblockingqueue и т.д. Главное, это всегда очередь. б. Группа потоков, которые непрерывно обследуют эту очередь. Нить, выполняющая вашу задачу, выглядит примерно так:
void run()
{
в то время как (истина)
{
//Получить задачу из внутренней очереди пула потоков (1)
// Вызов метода выполнения задачи. Если выполнение задачи вызывает исключение во время выполнения, поймайте его и покажите. (2)
}
}
Так как вы можете видеть, что работник будет свободен только в том случае, если в очереди нет задачи. Работник будет либо опросить очередь для задачи (1), либо выполнить задачу (2)