java多线程访问同一共享变量问题

qq412101450 qq412101450 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
直接上代码,为什么会输出error那一段,求大神解答!
public class ThreadTest {

private int flag = 0;

public void set1() {
flag = 0;
}

public void set2() {
flag = -1;
}

public void check() {
System.out.println(flag);
if (0 != flag && -1 != flag) {
System.out.println("error--------flag : " + flag);
}
}

public static void main(String [] args) {
final ThreadTest test = new ThreadTest();

final Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
test.set1();
}
}
});
thread1.start();

final Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
test.set2();
}
}
});
thread2.start();

final Thread thread3 = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
test.check();
}
}
});
thread3.start();
}
}
...全文

相关推荐

java多线程_java多线程下变量共享_

一个简单记录java多线程下变量共享问题,分析多线程内部运行

Dyingalive

实战并发编程 - 01多线程读写同一共享变量的线程安全问题深入剖析

文章目录示例CPU的内存模型Java内存模型 示例 来看个需求: 统计服务器某个接口的访问次数 accessCount字段表示接口被访问的次数, 每次访问接口的时候就调用一次access()方法,访问次数+1,累积下来,就能统计出接口被访问的次数了。 接口很可能被多个线程同时访问,即access()方法被多个线程调用。那么问题来了:多线程调用access()方法时,接口访问次数统计的结果是否能保证准确呢? 显而易见:不能。 CPU的内存模型 接下来分析一下为什么上面统计的结果会有问题. 我们先来简单理

小小工匠

Java多线程编程之ThreadLocal线程范围内的共享变量

主要介绍了Java多线程编程之ThreadLocal线程范围内的共享变量,本文讲解了ThreadLocal的作用和目的、ThreadLocal的应用场景、ThreadLocal的使用实例等,需要的朋友可以参考下

weixin_38661008

Java多线程编程之访问共享对象和数据的方法

主要介绍了Java多线程编程之访问共享对象和数据的方法,多个线程访问共享对象和数据的方式有两种情况,本文分别给出代码实例,需要的朋友可以参考下

weixin_38694699

Java多线程中Lock锁的使用总结

主要介绍了Java多线程中Lock锁的使用总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

weixin_38657984
评论 3
收藏 已收藏
分享
返回顶部
qq412101450
Java 51,407 成员 86,130 内容