美文网首页程序员
线程池之定长线程池newFixedThreadPool

线程池之定长线程池newFixedThreadPool

作者: 激情的狼王 | 来源:发表于2017-09-20 18:19 被阅读0次

    传统多线程方案中,一旦接受到请求之后,即创建一个新的线程,由该线程执行任务。任务执行完毕后,线程退出。这就是即时创建,即时销毁的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务执行时间很短,而且执行次数极其频繁,那么服务器将处于不停的创建线程,销毁线程的状态。

    t1: 线程创建时间
    t2: 线程执行时间,包括线程的同步等时间
    t3: 线程销毁时间

    线程本身的开销所占的比例为(t1+t3)/(t1+t2+t3)。如果线程执行的时间很短,这笔开销可能占到20%~50%左右。如果任务执行很频繁的话,这笔开销将是不可忽略的。
    所以引发了线程池的使用,初始化时就创建一个线程池,里面已经开好了线程。

    定长线程池就是池子里线程数是固定的,任务排队轮流使用,实例如下

    public static void main(String[] args) throws InterruptedException {
                ExecutorService service = Executors.newFixedThreadPool(5); //execute submit
            for (int i = 0; i < 6; i++) {
                service.execute(() -> {
                    try {
                        TimeUnit.MILLISECONDS.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    //输出当前线程名称
                    System.out.println(Thread.currentThread().getName());
                });
            }
        }
    
    QQ图片20170920181745.png
    可以看出第六个任务没有立即执行,而是等待有线程空出来之后才会执行。

    相关文章

      网友评论

        本文标题:线程池之定长线程池newFixedThreadPool

        本文链接:https://www.haomeiwen.com/subject/ydgosxtx.html