weixin_38932817 2018-09-24 10:17 采纳率: 0%
浏览 618
已结题

无状态对象 线程安全吗?

一个无状态对象的方法访问其他类的静态变量,这个时候应该线程不安全了吧。
class SharedState{
public static count;
}

class Stateless{
void dosth(){
SharedState.count++;
}
}

多个线程访问Stateless的dosth方法,这个时候线程不安全吧。

  • 写回答

6条回答 默认 最新

  • threenewbee 2018-09-24 11:03
    关注

    不安全,因为SharedState.count++;不是原子操作
    它在微观上相当于(注意,这个代码是假想的,实际上表现为多个机器指令而不是java代码)
    int temp = SharedState.count;
    temp = temp + 1;
    SharedState.count = temp;
    也就是分为读、操作、写回3个操作
    如果一个线程执行了第一个操作,被挂起,而第二个线程操作了SharedState.count,第一个线程的temp不会更新,导致脏读发生,那么它的更新会破坏数据的完整性。

    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大