1. 最近想看ThreadPoolExecutor的源码,但是对英文有时候理解没那么好,不知道有没有人做过对其中文注释过?
2. 如果想自己实现一个线程池,应该注意哪些方面,怎样才能提高线程池的性能?

解决方案 »

  1.   

    1.ThreadPoolExecutor源码问题 你可以看JAVA1.6 API嘛。。上面基本都有写。而且那些英文还是蛮好理解的哦。
    2.你看了ThreadPoolExecutor的源码应该会有一些心得的
      

  2.   

    涉及到“池”的东西,不管是实例池、数据库连接池,还是线程池,他们的实现都是极其复杂的。如果不是精于这些东西的话,要想实现并且能运用在实际中,那就是不可能的任务。线程池的实现,我粗粗地列举了一下,以如下技术难点:1:如果不是使用 java.util.concurrent.LinkedBlockingQueue 的话,那就需要自行实现一个阻塞的有界或者无界队列,用于存放等待的任务2:线程池中的线程在运行时产生异常且处理不当,这时将会产生线程泄漏,也就是说线程池中的线程少了一个。一个可用的线程池在监测到这种情况出现时应该回收该泄漏的线程,并及时补充一个新的线程3:线程池中的线程都在工作时,若还有任务加入进来,这时需要将其放入到队列之中,若池中的某个线程工作完了,需要及时通知队列中的任务附加到可用线程中去执行-----------------------------------------------------------------------
    线程池基本上是这样实现的:1:先 new 出固定数量的 Thread,类似于这样:Thread t0 = new Thread(new WorkRunnable());WorkRunnable 的结构基本上是这样的(实际远远比这复杂):public class WorkRunnable implements Runnable {    private Runnable command;    public WorkRunnable(Runnable command) {
            this.command = command;
        }    public void run() {
            command.run();
        }    public void setCommand(Runnable command) {
            this.command = command;
        }
    }
    2:执行 t0.start() 可以执行线程,如果执行完了,将 WorkRunnable 中的 command 换一个再 start() 又可以执行了。基本上的思路就是这样,但是实现起来极其复杂,不建议自己写,了解一下就可以了。