我试图理解Java中线程池的概念。为了做到这一点,我正在阅读各种教程,包括this one。
正如教程所述:
There is a performance overhead associated with starting a new thread,
and each thread is also allocated some memory for its stack etc.
但是,这里列出的代码意味着线程将在执行从任务队列中执行的runnable执行结束后死亡,因此,它的资源将被利用并由JVM收集垃圾:
public void run(){
while(!isStopped()){
try{
Runnable runnable = (Runnable) taskQueue.dequeue();
runnable.run();
} catch(Exception e){
//log or otherwise report exception,
//but keep pool thread alive.
}
}
}
那么如果线程死了那么整件事的目的是什么呢?我认为线程池中的线程应该类似于一个looper,并且应该在runnable传递时睡眠和唤醒,并且当runnable完成时将返回睡眠而不会被破坏,所以资源可能会被重用 - 不是垃圾收集。
我是否以错误的方式理解整个概念?或者它只是我过度评估的简化示例?
答案 0 :(得分:0)
在runnable执行结束后,代码示例中的线程不会消失。
那里有一个while
循环,因此它将循环并开始处理下一个元素。
答案 1 :(得分:0)
public void run(){
//If isStopped() equals false you can run the taskQueue. This means you have
//not stopped your thread.
//!isStopped() is the same as isStopped = false
//You need to invoke stop() method to stop your thread
while(!isStopped()){
try{
Runnable runnable = (Runnable) taskQueue.dequeue();
runnable.run();
} catch(Exception e){
//log or otherwise report exception,
//but keep pool thread alive.
}
}
}