Java线程池目的

时间:2014-06-09 02:19:31

标签: java multithreading

我试图理解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完成时将返回睡眠而不会被破坏,所以资源可能会被重用 - 不是垃圾收集

我是否以错误的方式理解整个概念?或者它只是我过度评估的简化示例?

2 个答案:

答案 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.
      }
    }
  }