1、synchronized
(1)重量锁,轻量锁,偏向锁(synchronized自带的优化)
![](https://img.haomeiwen.com/i7996159/c83e953321bf5910.png)
![](https://img.haomeiwen.com/i7996159/3f44072e36b24b99.png)
![](https://img.haomeiwen.com/i7996159/ce1b52e804568945.png)
![](https://img.haomeiwen.com/i7996159/5a13e038c753b6b7.png)
![](https://img.haomeiwen.com/i7996159/1b6434a351e664d8.png)
![](https://img.haomeiwen.com/i7996159/6fe57af61d028db9.png)
(2)锁的粒度
![](https://img.haomeiwen.com/i7996159/3979b80ae4b9e78d.png)
2、Lock锁
Lock锁可灵活控制锁的位置,优化点:将ReentrantLock变成ReentrantReadWriteLock读写锁。ReentrantReadWriteLock中的读锁是并行执行的。
3、一些经验
![](https://img.haomeiwen.com/i7996159/a03a9e938ab83950.png)
4、线程池优化策略
1、参数说明
![](https://img.haomeiwen.com/i7996159/982839cfd8551cef.png)
2、执行顺序
![](https://img.haomeiwen.com/i7996159/02b192c8e6d60066.png)
3、jdk自带的四种策略
(1)ThreadPoolExecutor.AbortPolicy 丢弃任务,并抛出 RejectedExecutionException 异常。
(2)ThreadPoolExecutor.CallerRunsPolicy:该任务被线程池拒绝,由调用 execute方法的线程执行该任务。
(3)ThreadPoolExecutor.DiscardOldestPolicy : 抛弃队列最前面的任务,然后重新尝试执行任务。
(4)ThreadPoolExecutor.DiscardPolicy,丢弃任务,不过也不抛出异常。
当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize,如果还有任务到来就会采取任务拒绝策略。
4、优化经验
![](https://img.haomeiwen.com/i7996159/6c1228523c7b6736.png)
![](https://img.haomeiwen.com/i7996159/efd2f1a94b350b3d.png)
5、并发容器的选择
![](https://img.haomeiwen.com/i7996159/9bfd6ca840bb0438.png)
![](https://img.haomeiwen.com/i7996159/87f7c75c1821b6a3.png)
6、上下文切换优化
1、
![](https://img.haomeiwen.com/i7996159/2f10ed1f65de7805.png)
2、
![](https://img.haomeiwen.com/i7996159/08c8d08ac3e1b776.png)
网友评论