volatile可见性 在多线程中未生效

本文探讨了在多线程环境下,volatile变量的可见性问题。尽管volatile保证了变量在不同线程间的可见性,但在某些情况下,如JDK1.7,可能无法立即反映变量的最新状态。通过一个简单的代码示例,作者发现volatile在JDK1.8之前的版本中可能存在不生效的情况,导致预期的线程同步效果未出现。
摘要由CSDN通过智能技术生成

话说日子一天天过去,小年轻涉足多线程快要超两个小时总计时了。
随着上次匿名内部类 需要final修饰 的问题 寻找结束,其实当时还涉及到另一个问题。
当时小年轻是为了 研究一下volatile的可见性在多线程当中的应用来操作代码的。

说到这里,就要说一说一这个多线程会遇到的一些问题。
首先,我们知道当一个线程运行到中途时突然睡眠了 ,这是另一个线程其实是可以运行的,并且可以使用第一个线程所使用的变量。
但是如果这个变量是不可见的 ,那么另一个线程就不会知道变量是否在第一个线程中数据已经改变,迭戈线程如果后面改变了第一个线程的中变量的值,第一个线程也不知道。这样数据就不符合事实,完全不符合全球知识共享的现实,这可不行

这个时候变量的可见性就十分重要,所以volatile就出现了 。
经过volatile修饰的变量会变得在具有可见性,所以无论是第一个线程还是第二个线程都能随时看到变量值的改变。
以上内容就是本文最核心知识了,接下来就是小年轻自己的问题: 无需关看

接下来就是问题出现的时候了:


```java
在这里插入代码片
public class VolatieTest {
   volatile boolean  run=true;
   
   void m(){
       System.out.println("m start");
       while(run){
            try {
            //睡十秒  让另一个线程可以在这段时间启动,会改变变量的值
                TimeUnit.SECONDS.sleep(10);
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值