java设置线程池大小,这里提供三个考量点:
IO密集型操作:
1,一般情况程序线程数等于cpu线程数的两到三倍就能很好的利用cpu了
2,一个公式:线程池设定最佳线程数目 = ((线程池设定的线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目
这个公式的线程cpu时间是预估的程序单个线程在cpu上运行的时间(通常使用loadrunner测试大量运行次数求出平均值)
**** PS: 如果不想测试,则线程数设置为2N为最保守的取值
(等待时间与计算时间相等)
计算密集型操作(没有等待时间)
(等待时间 + 线程cpu时间)/线程CPU时间 = 1
即 N个CPU设置N个线程数最合适
import java.util.Date;
/**
* 多线程在现代cpu中的时间分片运行方式
*
* 一个进程是一个应用程序运行时启动的一个运行单元
* 一个进程可以包括一个或者多个线程
* 每个线程是cpu运行的一个实际单位
*
* Java中多线程的具体执行方式取决于java解析器所运行的系统平台
* 对于支持time sliced的系统,线程采用时间分片的方式运行(每个线程分配一定的时间额度,不考虑其优先级)
* 对于不支持time sliced的系统,线程采用按照优先级从高到低的方式调度执行
*/
public class TimeSlicedThread {
public static void main(String[] args){
Dog dog1 = new Dog();
Dog dog2 = new Dog();
Dog dog3 = new Dog();
Dog dog4 = new Dog();
Dog dog5 = new Dog();
Dog dog6 = new Dog();
Dog dog7 = new Dog();
Dog dog8 = new Dog();
dog1.setName("dog1");
dog2.setName("dog2");
dog3.setName("dog3");
dog4.setName("dog4");
dog5.setName("dog5");
dog6.setName("dog6");
dog7.setName("dog7");
dog8.setName("dog8");
dog1.start();
dog2.start();
dog3.start();
dog4.start();
dog5.start();
dog6.start();
dog7.start();
dog8.start();
}
}