线程池
线程池7大参数
| 参数 | 参数意思 |
|---|---|
| 存活的时间单位 | |
线程池工作原理图



拒绝策略
| CallerRunsPolicy | 线程池未关闭,则使用调用线程直接运行程序。 |
| AbortPolicy | 丢弃任务,并抛出 拒绝执行 RejectedExecutionException异常信息 |
| DiscardPolicy | 直接丢弃 |
| DiscardOldestPolicy | :丢弃阻塞队列中最老的一个任务,加入新任务 |
注意事项

手写线程池
/**
* 可缓存线程池
* @return
*/
public static ExecutorService newCachedThreadPool(){
return new ThreadPoolExecutor(0,
Integer.MAX_VALUE,
60L,
TimeUnit.SECONDS,
new SynchronousQueue<>(),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy());
}
- 固定长度线程池-newFixedThreadPool
/**
* 固定长度线程池
* @return
*/
public static ExecutorService newFixedThreadPool(){
return new ThreadPoolExecutor(10,
10,
0L,
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy());
}
- 单一线程池-newSingleThreadExecutor()
/**
* 单一线程池
* @return
*/
public static ExecutorService newSingleThreadExecutor(){
return new ThreadPoolExecutor(1,
1,
0L,
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy());
}
newWorkStealingPool
public static ExecutorService newWorkStealingPool(int parallelism) {
/**
* parallelism:并行级别,通常默认为JVM可用的处理器个数
* factory:用于创建ForkJoinPool中使用的线程。
* handler:用于处理工作线程未处理的异常,默认为null
* asyncMode:用于控制WorkQueue的工作模式:队列---反队列
*/
return new ForkJoinPool(parallelism,
ForkJoinPool.defaultForkJoinWorkerThreadFactory,
null,
true);
}
HashSet 线程不安全 解决方案->CopyOnWriteArraySet
最新的多线程类 使用示范
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService service = Executors.newFixedThreadPool(10);
try {
CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return 1;
}, service).whenComplete((v, e) -> {
if (e == null) {
// 模拟异常
// int v1 = 1 / 0;
System.out.println("计算完成");
System.out.println("v = " + v);
}
}).exceptionally((e) -> {
System.out.println("计算异常");
System.out.println("e = " + e);
return null;
});
System.out.println("主线程自己忙活……");
} catch (Exception e) {
} finally {
service.shutdown();
}
}
get()和join()
| completableFuture.get() | 编译时,报出检查异常。 必须抛出异常 |
| completableFuture.join() | 运行阶段才报出异常 |
java数值运算最快的是 左移和右移
2<<2 =8 左移 相当于 乘以 2的几次方
16>>2 =4 右移相当于 除以 2的几次方
字符串格式化 %.2f 意思是 保留2位小数
String productName = "Java";
System.out.println(String.format(productName + " in %s price is %.2f ", "jd", 1.23456)); 结果
Java in jd price is 1.23
- 本文标签: Java
- 本文链接: http://119.91.109.247:8443//article/61
- 版权声明: 本文由张亚东原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权