Coup de Grace

并发系列读后 关于回顾的点

最近在往回翻一翻基础方面的书,关于并发我手头的书有这样3本,最近一周快速的翻了一遍:

我读起来最舒服的一本,说不好是因为编排合理还是因为作者脚踏实地的要写点东西,对于有一定经验的开发来说,这本书完爆后两本.

前几天跟对接的同事聊天,貌似他还跟作者搞过同一个项目.

这本书读起来不舒服,每一章你都好像看过,但又不太实用,可能自己目前的应用场景不是容器和服务框架导致的?

我认为辨别好书坏书的方法应该是这样一个定律:如果你觉得不靠谱的同事经常提起某本书,那么这本书不靠谱的可能性会增大很多.

估计大家入门书籍都是这本..总结就是行文没有第一本舒服.源码解析有没有第二本透彻.

下面会按顺序回顾一下我自己边翻边想的点.

关于Happen-Before原则

貌似除了volatile之外,其他的几种情况都是我们意识里真的不应该去重排序的.

线程的中断

我们需要添加中断后的处理相关,用Thread.currentThread().isInterrupted()来判断

关于优先级

目前是使用setPriority设置,要我说干脆实现Ordered算了…

synchronized锁静态块的场景

思来想去是不是只有不同实例访问静态变量的时候才用得到?

通常我们遇到这种情况会把这个变量换一个位置存放..比如参数里.

关于Lock的可中断

算是保留了手工解决死锁的能力,Lock.lockInterruptibly()尝试去获得锁,但优先响应中断.

大部分并发容器里面的实现都是可中断的.

关于信号量

之前的文章里留了个小坑就是关于Semaphore的,最近翻书就在思考,真的有人把Semaphore跟CountDownLatch一起用么?

关于Condition在BlockingQueue的应用

我们使用两把锁,维护两个不同的Condition:notFull与notEmpty.

当提取时:

当写入时:

我回头翻这段儿阅读的时候,觉得影响阅读的点可能是我没把读取->提取.

读写分离锁与CopyOnWrite与锁分离

读写分离锁只实现了读与读之间的非互斥,CopyOnWrite把读写操作之间的互斥解决掉了.

那么当我们真的使用两把锁去进行任何具有功能上的操作,不同操作间的锁独占就不存在了.比如LinkedBlockingQueue的实现.

System.arrayCopy()吧应该是.

关于线程池

ExecutorService es=Executors.*

下面的部分都实现了ThreadPoolExecutor,只是其中corePoolSize,maxPoolSize,BlockingQueue,拒绝策略的不同.

而相对应的Queue类型:

关于Fork/Join

继承了RecursiveAction/RecursiveTask<?>的Task类把自身显式的fork()出去,后者产生结果再用join()聚合起来.

转头又恰似CompletableFuture.supplyAsync/runAsync

关于NIO与AIO

该用netty的也用netty了…留几个demo翻翻就好了..

关于java8

手头我两三本这方面的书,其实我觉得基本概念就那么点,要是那本书能把常用的/奇技淫巧型的API都列个遍就好了,我想用了就翻翻岂不美哉?

关于Akka

之前小试一手写了一下单位项目海外代理的心跳检测,自测跟生产运行暂时都还没出什么问题..这我就放心了.后续可能会搞一些Streams相关的内容,另开文章咯~

并发相关言尽于此,剩余部分我会在java性能权威指南读后中继续.