线程池
ThreadPoolExecutor
ExecutorService EXECUTOR = new ThreadPoolExecutor(10, 20, 30L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(1024), ThreadFactoryBuilder.create().setNamePrefix("Bind-Executor-").build());
param1:核心线程数
param:2:最大线程数
param3:闲置时间(到达闲置时间自动关闭线程)
param4:闲置时间单位
param5:等待缓存区
param6:创建一个新线程
线程
Callable
public static class DemoThread implements Callable<Integer> {
private Integer total;
DemoThread(Integer total){
this.total = total;
}
@Override
public Integer call() throws Exception {
Thread.sleep(1000);
return total += 1;
}
}
示例
使用线程
public static void test() throws ExecutionException, InterruptedException {
long start = System.currentTimeMillis();
LinkedList<Future<Integer>> futures = new LinkedList<>();
LinkedList<Integer> result = new LinkedList<>();
for (int i = 0; i < 100; i++) {
Future<Integer> submit = EXECUTOR.submit(new DemoThread(i));
futures.add(submit);
}
for (Future<Integer> f : futures){
while (true){
if(f.isDone() && !f.isCancelled()){
result.add(f.get());
break;
}
}
}
System.out.println("test:" + result.toString());
EXECUTOR.shutdown();
System.out.println("test:" + "运行时长" + (System.currentTimeMillis() - start) + "ms");
}
结果:
不使用线程
public static void test2() throws InterruptedException {
long start = System.currentTimeMillis();
LinkedList<Integer> result = new LinkedList<>();
for (int i = 0; i < 100; i++) {
int bi = i + 1;
Thread.sleep(1000);
result.add(bi);
}
System.out.println("test2:" + result.toString());
System.out.println("test2:" + "运行时长" + (System.currentTimeMillis() - start) + "ms");
}
结果: