Race condition--Java Concurrency In Practice C02读书笔记
[本文是我对Java Concurrency In Practice第二章的归纳和总结,??转载请注明作者和出处,??如有谬误, 欢迎在评论中指正.?]
?
多线程环境下,无需调用方进行任何同步处理也能保证正确性的类是线程安全的类
?
无状态的对象是线程安全的。无状态是指没有成员变量。由于方法的局部变量都是在线程私有的栈中分配的,因此在一个线程中调用无状态对象的方法,不会影响到其他线程。
?
race condition: 正确性依赖于事件发生的相对时间。
check-and-act是race condition中的一种,指的是基于check的结果进行操作。由于check和act并非是原子的,进行act时check的结果可能已经无效,那么基于check所进行的act就可能带来问题。
见如下的lazy单例类:
public class Widget {public synchronized void doSomething() {...}}public class LoggingWidget extends Widget {public synchronized void doSomething() {System.out.println(toString() + ": calling doSomething");super.doSomething();}}?如果java中的锁不是可重入的,那么调用LoggingWidget对象的doSomething方法就会导致死锁。
?