日期:2014-05-20  浏览次数:20912 次

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

------解决方案--------------------
1.ThreadPoolExecutor源码问题 你可以看JAVA1.6 API嘛。。上面基本都有写。而且那些英文还是蛮好理解的哦。
2.你看了ThreadPoolExecutor的源码应该会有一些心得的
------解决方案--------------------
涉及到“池”的东西,不管是实例池、数据库连接池,还是线程池,他们的实现都是极其复杂的。如果不是精于这些东西的话,要想实现并且能运用在实际中,那就是不可能的任务。

线程池的实现,我粗粗地列举了一下,以如下技术难点:

1:如果不是使用 java.util.concurrent.LinkedBlockingQueue 的话,那就需要自行实现一个阻塞的有界或者无界队列,用于存放等待的任务

2:线程池中的线程在运行时产生异常且处理不当,这时将会产生线程泄漏,也就是说线程池中的线程少了一个。一个可用的线程池在监测到这种情况出现时应该回收该泄漏的线程,并及时补充一个新的线程

3:线程池中的线程都在工作时,若还有任务加入进来,这时需要将其放入到队列之中,若池中的某个线程工作完了,需要及时通知队列中的任务附加到可用线程中去执行

-----------------------------------
线程池基本上是这样实现的:

1:先 new 出固定数量的 Thread,类似于这样:Thread t0 = new Thread(new WorkRunnable());

WorkRunnable 的结构基本上是这样的(实际远远比这复杂):

Java code
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;
    }
}