一个无状态对象的方法访问其他类的静态变量,这个时候应该线程不安全了吧。
class SharedState{
public static count;
}
class Stateless{
void dosth(){
SharedState.count++;
}
}
多个线程访问Stateless的dosth方法,这个时候线程不安全吧。
一个无状态对象的方法访问其他类的静态变量,这个时候应该线程不安全了吧。
class SharedState{
public static count;
}
class Stateless{
void dosth(){
SharedState.count++;
}
}
多个线程访问Stateless的dosth方法,这个时候线程不安全吧。
不安全,因为SharedState.count++;不是原子操作
它在微观上相当于(注意,这个代码是假想的,实际上表现为多个机器指令而不是java代码)
int temp = SharedState.count;
temp = temp + 1;
SharedState.count = temp;
也就是分为读、操作、写回3个操作
如果一个线程执行了第一个操作,被挂起,而第二个线程操作了SharedState.count,第一个线程的temp不会更新,导致脏读发生,那么它的更新会破坏数据的完整性。