现在已经很少有人自己写线程池了, jdk5 之后自带的线程池已经可以满足日常的多种需求
对于多线程通常我们考虑两个点
1. 如何让cpu工作量饱和
2. 线程过多时多读在多个线程之间轮询会带来的性能损耗
指导思想很简单
对于cpu密集型的应用程序, 尽量保证线程池大小=cpu的内核数
对于IO密集型的应用程序, 要按照实际情况适当>cpu内核数
要尽量避免使用同步(synchronization) 和 volatile 关键字
synchronization 的工作方式简单粗暴, 同一个时间内, 当锁相同时只能有一个线程进入代码块进行处理
volatile 实际上并不能帮助你处理线程安全问题,它只是要求每个线程在访问这个变量时都会去主内存中读取这个变量
用volatile修饰的变量,线程在每次使用变量的时候,都要实时回写给主内存,而不是操作变量的拷贝, 而且这个关键字由于放弃使用cpu寄存器会带来大量的性能开销
关于volatile关键字与线程安全之间的关系请参阅
http://lizhe.name.csdn.net/node/94
不过我们上面的内容有点跑题了 😛