记录一个多线程问题中,访问共享数据的一个奇怪的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录一个多线程问题中,访问共享数据的一个奇怪的问题相关的知识,希望对你有一定的参考价值。

首先是mythread类

public class MyThread extends Thread {
private int count =5;
public void run(){
super.run();
count--;
System.out.println("由"+this.currentThread().getName()+"计算,count="+count);
}
}


主方法类
public class Main {

public static void main(String[] args) {
MyThread myThread = new MyThread();
Thread a = new Thread(myThread, "A");
Thread b = new Thread(myThread, "B");
Thread c = new Thread(myThread, "C");
Thread d = new Thread(myThread, "D");
Thread e = new Thread(myThread, "E");
a.start();
b.start();
c.start();
d.start();
e.start();
}
}


运行结果:

由A计算,count=4
由D计算,count=3
由E计算,count=1
由C计算,count=2 

由B计算,count=0

这个运行结果是我实在是看不懂,如果是C线程先进到run方法,执行了count--,然后E线程进到run方法,执行了count--,那么这时候,E应该输出1没错,但是C难道不应该也是输出1吗?

由A计算,count=4
由D计算,count=3
由E计算,count=1
由C计算,count=1

由B计算,count=0

难道不应该是这样才正确吗?

 



以上是关于记录一个多线程问题中,访问共享数据的一个奇怪的问题的主要内容,如果未能解决你的问题,请参考以下文章

多线程篇五:多个线程访问共享对象和数据的方式

多线程线程同步

多线程访问共享对象和数据的方式

多线程安全问题

多线程安全问题

多线程一共就俩问题:1.线程安全(访问共享数据) 2.线程通信(wait(),notify())