看java并发编程实战的一个关于线程安全的问题

Xiaojun1024 2017-07-19 09:58:52
线程不安全的
public class MuTableInteger(){
private int value;

public int get(){return value;}
public void set(int value){this.value = value}
}

线程安全的
public class SynchronizedInteger(){
private int value;

public synchronized int get(){return value;}
public synchronized void set(int value){this.value = value}
}

为什么上面那段是不安全的,按照我对本书前两章的理解,synchronized关键字无非就是保证这段代码是原子操作。
get和set方法好像本身应该就是原子操作了吧,这样加synchronized关键字有什么意义吗?为什么不加就是线程不安全的,加了就是线程安全的?
...全文
173 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
soton_dolphin 2017-07-19
  • 打赏
  • 举报
回复
synchronized 不是保证原子操作,而是保证在某一个时间只有一个线程可以使用这个对象的方法。当一个线程进入synchronized set()方法时,没有其他线程可以再使用这个对象里所有synchronized 方法
galiniur0u 2017-07-19
  • 打赏
  • 举报
回复
因为可能一个线程在get的同时,另一个线程在set。导致两线程获取值出错。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧