线程--->ThreadPool初步认识

目录

无标题.png

一.说明

1.线程池:就是一个管家,本来线程都是野孩子,现在有了一个家。
2.核心线程:就是线程池会保留数个线程一直存在,正式工。
3.非核心线程:就是临时工,干完活就走了。

二.newFixedThreadPool

里面都是核心线程。都是正式工。不要临时工。
executorService = Executors.newFixedThreadPool(2);
executorService.execute(new MyTest(0));
private class MyTest implements Runnable{

        private int ThreadId;

        public MyTest(int threadId){
            this.ThreadId = threadId;
        }
        @Override
        public void run() {
            for (int i = 0; i < 2; i++){
                System.out.println("进程号码是=" + ThreadId + "----->输出为=" + i);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

三.newCachedThreadPool

里面没有核心线程。都是临时工,没有正式工,上限是Integer.MAX_VALUE
executorService = Executors.newCachedThreadPool();
executorService.execute(new MyTest(0));

四.newSingleThreadExecutor

固定只有一个正式工,不要临时工。
executorService = Executors.newSingleThreadExecutor();
executorService.execute(new MyTest(0));

五.newScheduledThreadPool

专用执行类似于Timer的线程池
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
scheduledThreadPool.schedule(new Runnable() {

    @Override
    public void run() {
        System.out.println("delay 3 seconds");
    }
}, 3, TimeUnit.SECONDS);
scheduledThreadPool.scheduleAtFixedRate(new Runnable() {

    @Override
    public void run() {
        System.out.println("delay 1 seconds, and excute every 3 seconds");
    }
}, 1, 3, TimeUnit.SECONDS);

六.自定义ThreadPoolExecutor

自己做管家,自己定义管理方式,几个正式工,最多几个临时工,临时工干完活还可以等多长时间就可以滚蛋了,任务的队列模式。
executorService = new ThreadPoolExecutor(2, 4, 60, TimeUnit.SECONDS, new LinkedBlockingDeque());
executorService.execute(new MyTest(0));
参数 含义
corePoolSize 核心线程数,默认情况下核心线程会一直存活,即使处于闲置状态也不会受存keepAliveTime限制。除非将allowCoreThreadTimeOut设置为true。
maximumPoolSize 线程池所能容纳的最大线程数。超过这个数的线程将被阻塞。当任务队列为没有设置大小的LinkedBlockingDeque时,这个值无效。
keepAliveTime 非核心线程的闲置超时时间,超过这个时间就会被回收。
unit 指定keepAliveTime的单位,如TimeUnit.SECONDS。当将allowCoreThreadTimeOut设置为true时对corePoolSize生效。
workQueue 线程池中的任务队列.常用的有三种队列SynchronousQueue,LinkedBlockingDeque,ArrayBlockingQueue。
threadFactory 线程工厂,提供创建新线程的功能。ThreadFactory是一个接口,只有一个方法public interface ThreadFactory { Thread newThread(Runnable r); }

你可能感兴趣的:(线程--->ThreadPool初步认识)