package com.neutron.t23;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/**
* 线程池
* 1.固定个数的线程池
* 2.缓存线程池,开始线程数0
* 如果需要线程,当前线程池没有,那么创建线程池
* 如果需要线程,线程池中有没有使用的线程,那么使用已经存在的线程
* 如果线程池中线程超过60秒(默认)没有使用,那么该线程停止
* 3.只有1个线程的线程池
* 保证线程执行的先后顺序
*/
public class T239SinglePool {
/*
T1:java.util.concurrent.ThreadPoolExecutor@2503dbd3
[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]
T2:java.util.concurrent.ThreadPoolExecutor@2503dbd3
[Running, pool size = 2, active threads = 2, queued tasks = 0, completed tasks = 0]
pool-1-thread-1
pool-1-thread-2
T3:java.util.concurrent.ThreadPoolExecutor@2503dbd3
[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 2]
*/
public static void main(String[] args) throws InterruptedException, ExecutionException {
// 创建个数为1的线程池
ExecutorService service = Executors.newSingleThreadExecutor();
for (int i = 0; i < 2; i++) {
final int j = i;
service.execute(() -> {
try {
TimeUnit.MILLISECONDS.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(j + ":" + Thread.currentThread().getName());
});
}
service.shutdown();
}
}
thread50 - SinglePool
最新推荐文章于 2023-04-03 11:23:04 发布