corepoolsize:1,2号窗口是一直都开着的,345是根据阻塞队列满了,忙不过来才开,阻塞队列也满了,那就只能使用拒绝策略了。
最大线程到底该如何定义设置?maxPoolSize
1.CPU密集型:机器几核就写几,可以保持cpu效率最高。Runtime.getRuntime().availableProcessors();
2.IO密集型:要大于>判断程序中非常耗IO的线程,大于这个数就行,一般是2倍
ForkJoin
特点:工作窃取,如果当前线程执行完了,可以执行其他未执行的任务
异步回调:对将来的某个事件结果进行建模
volatile:轻量级同步机制
1.可见性
2.不保证原子性
3.禁止指令重排序
指令重排序:源代码->编译器优化->指令之间可能会重排->执行;考虑数据依赖性。
单例:
CAS:
比较当前工作内存中的值和主内存中的值,如果这个值是期望的,name执行操作,如果不是就一直循环-自旋锁do-while。
缺点:自旋会浪费时间,一次性只能保证一个共享变量的原子性,会出现aba问题。
ABA问题:
死锁排查