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