线程池的几种常见的创建的方式

如题所述

    一:创建大小不固定的线程池  

    二:创建固定数量线程的线程池  

    三:创建单线程的线程池  

    四:创建定时线程  

    1.创建大小不固定的线程池

    [java] view plain copy

    package com.peace.pms.Test;  

    import java.util.concurrent.ExecutorService;  

    import java.util.concurrent.Executors;  

    /** 

    * @Author: cxx 

    * @Date: 2018/3/3 17:16 

    */  

    public class ThreadPoolDemo {  

    public static class Taskdemo implements Runnable{  

    @Override  

    public void run() {  

    for(int i=0;i<10;i++){  

    System.out.println(Thread.currentThread().getName()+":"+i);  

    }  

    }  

    }  

    public static void main(String[] args) {  

    ExecutorService es=Executors.newFixedThreadPool(2);  

    for(int i=0;i<10;i++){  

    Taskdemo tc=new Taskdemo();  

    es.execute(tc);  

    }  

    es.shutdown();  

    }  

    }  



    2.创建固定数量线程的线程池

    [java] view plain copy

    public static void main(String[] args) {  

    ExecutorService es=Executors.newFixedThreadPool(2);  

    for(int i=0;i<10;i++){  

    Taskdemo tc=new Taskdemo();  

    es.execute(tc);  

    }  

    es.shutdown();  

    }  

    3.创建单线程的线程池

    [java] view plain copy

    public static void main(String[] args) {  

    ExecutorService es=Executors.newSingleThreadExecutor();  

    for(int i=0;i<10;i++){  

    Taskdemo tc=new Taskdemo();  

    es.execute(tc);  

    }  

    es.shutdown();  

    }  

    4.创建定时线程

    [java] view plain copy

    public static void main(String[] args) {  

    ScheduledExecutorService es=Executors.newScheduledThreadPool(2);  

    for(int i=0;i<10;i++){  

    Taskdemo tc=new Taskdemo();  

    //参数1:目标对象  

    //参数2:隔多长时间开始执行线程,  

    //参数3:执行周期  

    //参数4:时间单位  

    es.scheduleAtFixedRate(tc, 30, 10, TimeUnit.MILLISECONDS);  

    }  

    es.shutdown();  

    }  

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-12-29
简而言之,线程池就是管理线程的一个容器,有任务需要处理时,会相继判断核心线程数是否还有空闲、线程池中的任务队列是否已满、是否超过线程池大小,然后调用或创建线程或者排队,线程执行完任务后并不会立即被销毁,而是仍然在线程池中等待下一个任务,如果超过存活时间还没有新的任务就会被销毁,通过这样复用线程从而降低开销。

2、使用线程池有什么优点?
可能有人就会问了,使用线程池有什么好处吗?那不用说,好处自然是有滴。大概有以下:
1、提升线程池中线程的使用率,减少对象的创建、销毁。
2、线程池的伸缩性对性能有较大的影响,使用线程池可以控制线程数,有效的提升服务器的使用资源,避免由于资源不足而发生宕机等问题。(创建太多线程,将会浪费一定的资源,有些线程未被充分使用;销毁太多线程,将导致之后浪费时间再次创建它们;创建线程太慢,将会导致长时间的等待,性能变差;销毁线程太慢,导致其它线程资源饥饿。本回答被网友采纳
第2个回答  2021-01-20
1、newCachedThreadPool()
创建一个可缓存的线程池,如果线程池的规模超过了处理需求,将自动回收空闲线程,而当需求增加时,则可以自动添加新线程,线程池的规模不存在限制。
2、newFixedThreadPool(2)
创建一个固定长度的线程池,每当提交一个任务就创建一个线程,直到达到线程池的数量,超出的线程会在队列中等待。
3、newScheduledThreadPool(2)
创建了一个固定长度的线程池,而且以延迟或定时的方式来执行任务,类似于Timer。
4、newSingleThreadExecutor()
创建一个单线程化的线程池,它只会用的工作线程来执行任务,所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
5、newSingleThreadScheduledExecutor()
创建一个单例线程池,定期或延时执行任务。
6、newWorkStealingPool(3)
创建一个带并行级别的线程池,并行级别决定了同一时刻有多少个线程在执行,如不穿如并行级别参数,将默认为当前系统的CPU个数。
相似回答