目录

无标题.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<Runnable>());
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); } |
网友评论