volatile的问题

阳明 to life 阳明 to life 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
大致理解volatile就是线程中变量修改对主内存的及时同步,那下面这段简单的代码为何不能按照理想工作
下面代码大致想做到当主线程将toBeStop更新后所有线程将停止退出执行


import java.util.Arrays;

public class VolatileTest
{
volatile boolean toBeStop;

public static void main(String[] args)
{
VolatileTest test = new VolatileTest();
for(int i = 0 ; i<5;i++)
{
Thread t = test.new MyThread();
t.start();
}
while(Thread.activeCount()>1)
{
Thread[] active = new Thread[5];
System.out.println("还有线程在运行"+Thread.enumerate(active)+":["+Arrays.asList(active)+"]");
if(!test.toBeStop)
test.toBeStop = true;
}
}


class MyThread extends Thread
{

@Override
public void run()
{
int i = 0;
while(!toBeStop)
{
System.out.println(toBeStop+" "+this.getName()+":"+i++);
}
}
}
}
...全文

相关推荐

Java并发编程(18)第五篇中volatile意外问题的

Java并发编程(18)第五篇中volatile意外问题的正确分析解答(含代码)编程开发技术共5页.pdf.zip

CyMylive.

C语言 volatile与const同时使用应注意的问题

const和volatile放在一起的意义在于: (1)本程序段中不能对a作修改,任何修改都是非法的,或者至少是粗心,编译器应该报错,防止这种粗心;(2)另一个程序段则完全有可能修改,因此编译器最好不要做太激进的优化。 “const”含义是“请做为常量使用”,而并非“放心吧,那肯定是个常量”。“volatile”的含义是“请不要做没谱的优化,这个值可能变掉的”,而并非“你可以修改这个值”。因此,它们本来就不是矛盾的。 const修饰的变量不允许这里修改不代表不允许别处修改,比如: 代码如下:int i = 5;const int* p = &i;*p = 6; // 不可以;i = 7; //

weixin_38524871

从volatile说到i++的线程安全问题.docx

从volatile说到i++的线程安全问题.docx

_webkit

JUC包含线程,线程池,CAS,volatile等底层原理,以及相关问题的解决方式以及相关工具类的使用

JUC包含线程,线程池,CAS,volatile等底层原理,以及相关问题的解决方式以及相关工具类的使用,包含但不限于:synchronize的底层原理,线程的执行流程,lock锁底层原理等,线程不安全的集合以及底层等.

weixin_44223168

Java 并发⾯试问题之 volatile 到底是什么?

场景引入,问题初现 很多同学出去⾯试,都会被问到⼀个常⻅的问题:说说你对 volatile 的理解? 不少初出茅庐的同学可能会有点措⼿不及,因为可能就是之前没关注过这个。但是⽹上百度⼀下呢,不少⽂章写的很好,但是理论扎的太深,⽂字太多,图太少,让⼈有点难以理解。 基于上述痛点,这篇⽂章尝试站在年轻同学的⻆度,⽤最简单的⼤⽩话,加上多张图给⼤家说⼀下,volatile 到底是什么? 当然本⽂不会把理论扎的太深,因为⼀下⼦扎深了⽂字太多,很多同学还是会不好理解。 本⽂仅仅是定位在⽤⼤⽩话的语⾔将 volatil

码上代码
评论 9
收藏 已收藏
分享
返回顶部
阳明 to life
Java SE 62,621 成员 307,251 内容