java多线程无效,关于 Java 多线程的几点疑问,求助大佬

Java 多线程的线程安全需要保证原子性和可见性,volatile 关键字可以保证可见性不能保证原子性,synchronized 关键字可以保证可见性和原子性,不过有几点疑问请教一下大佬:

(1)volatile 关键字如何保证的可见性,在书上和博客上看到了两种不同的说法,不知道哪种正确:

1.赋值操作后会立即写回主内存,一个线程数据回写到主内存会导致其他线程对应数据无效(通过嗅探总线上传输的数据检查自身数据),线程下次使用时若发现自身数据失效,则会从主内存上取数据更新;

2.线程中每次 use 变量时,都需要连续执行 read->load->use 几项操作保证使用的数据是最新的,线程每次 assign 变量时,都需要连续执行 assign->store->write 几项操作,保证赋值后立即写回主内存;

(2)未使用 volatile 关键字的普通变量赋值后工作内存写回主内存的时机: volatile 关键字修饰的变量赋值语句后会立即写回主内存,普通变量赋值修改后什么时候写回主内存呢,是当一个方法执行完后吗?

(3)volatile 使用内存屏障解决指令重排序带来的线程安全问题,synchronized 是怎么解决指令重排序带来的线程安全问题的呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值