终于把这本经典的Java并发书看完了,虽然之前看的Thinking in Java和Effective Java里面都有并发的章节,但是这本书讲的更加深入,并发是Java程序员抛不开的一个话题,所以看一看这本书对我们是极其有帮助的。当然这本书写了挺久的,里面有些东西可能落伍了,比如说GUI编程。所以我认为用处不大的章节都选择性跳过了。还有就是在TIJ和EJ里面讲到过的内容也跳过了,没看过前面两本书的同学可以看看我略过的章节。最后就是有几个实战内容,感觉目前我的层次还达不到那么高,写起来可能体会不深就放一放,等工作了一段时间之后在回过头来看看,加深感悟。
当一个对象被多线程使用了,而我们用一个int计算这个对象被调用了多少次,此时这个对象就是非线程安全。因为int的递增操作并不是原子性的,可能int在一个线程递增了一半,该对象就切换到了另一个线程中运行了,此时该对象就会产生与我们预期不符的行为。
我们都知道java中有原子变量,那么是不是说对于一个类,我们只需要把所有的域都变成原子变量,这个类就是线程安全的呢?很显然并不是,我们在2中提到了竞态条件,当一系列原子变量的操作是前后关联的,那么这一系列的操作就是竞态条件,此时我们如果不进行处理,那么这个类就不是线程安全的
同步不仅能实现原子操作,同步还有一个重要的方面就是内存可见性的实现。内存可见性表示,在一个共享变量被修改了之后,其他线程能够立即观察到该变量的修改后的值。如果不同步的话这一点是做不到的。