java多线程访问同一共享变量问题
直接上代码,为什么会输出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();
}
}
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多线程下变量共享问题,分析多线程内部运行
实战并发编程 - 01多线程读写同一共享变量的线程安全问题深入剖析
文章目录示例CPU的内存模型Java内存模型 示例 来看个需求: 统计服务器某个接口的访问次数 accessCount字段表示接口被访问的次数, 每次访问接口的时候就调用一次access()方法,访问次数+1,累积下来,就能统计出接口被访问的次数了。 接口很可能被多个线程同时访问,即access()方法被多个线程调用。那么问题来了:多线程调用access()方法时,接口访问次数统计的结果是否能保证准确呢? 显而易见:不能。 CPU的内存模型 接下来分析一下为什么上面统计的结果会有问题. 我们先来简单理
Java多线程编程之ThreadLocal线程范围内的共享变量
主要介绍了Java多线程编程之ThreadLocal线程范围内的共享变量,本文讲解了ThreadLocal的作用和目的、ThreadLocal的应用场景、ThreadLocal的使用实例等,需要的朋友可以参考下
Java多线程编程之访问共享对象和数据的方法
主要介绍了Java多线程编程之访问共享对象和数据的方法,多个线程访问共享对象和数据的方式有两种情况,本文分别给出代码实例,需要的朋友可以参考下
Java多线程中Lock锁的使用总结
主要介绍了Java多线程中Lock锁的使用总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


