实例4 - 最优线程池大小

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();

    }



}

你可能感兴趣的:(实例4 - 最优线程池大小)