一个JAVA线程问题
代码如下:(问题在运行结果那里)
-----------------------------------------------------------------------------------------------------------------------------------
class MyThread implements Runnable {
private int ticket = 5;
public void run() {
for (int i = 0; i < 5; ++i) {
//synchronized (this) {
if (ticket > 0) {
try {
//Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "卖票: ticket = " + (ticket--));
}
//}
}
}
}
public class Test2 {
public static void main(String[] agrs) {
MyThread mt = new MyThread();
Thread t1 = new Thread(mt);
Thread t2 = new Thread(mt);
Thread t3 = new Thread(mt);
t1.start();
t2.start();
t3.start();
}
}
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
运行结果却是:
------------------------------------------------------------------------------------------------------------------------------------------
Thread-1卖票: ticket = 3
Thread-2卖票: ticket = 5 //怎么5会在3的下面?
Thread-0卖票: ticket = 4
Thread-0卖票: ticket = 2
Thread-1卖票: ticket = 2
Thread-2卖票: ticket = 2
Thread-2卖票: ticket = 1
Thread-1卖票: ticket = 1
Thread-0卖票: ticket = 0
-----------------------------------------------------------------------------------------------------------------------------------
class MyThread implements Runnable {
private int ticket = 5;
public void run() {
for (int i = 0; i < 5; ++i) {
//synchronized (this) {
if (ticket > 0) {
try {
//Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "卖票: ticket = " + (ticket--));
}
//}
}
}
}
public class Test2 {
public static void main(String[] agrs) {
MyThread mt = new MyThread();
Thread t1 = new Thread(mt);
Thread t2 = new Thread(mt);
Thread t3 = new Thread(mt);
t1.start();
t2.start();
t3.start();
}
}
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
运行结果却是:
------------------------------------------------------------------------------------------------------------------------------------------
Thread-1卖票: ticket = 3
Thread-2卖票: ticket = 5 //怎么5会在3的下面?
Thread-0卖票: ticket = 4
Thread-0卖票: ticket = 2
Thread-1卖票: ticket = 2
Thread-2卖票: ticket = 2
Thread-2卖票: ticket = 1
Thread-1卖票: ticket = 1
Thread-0卖票: ticket = 0
...全文
相关推荐
Java多线程 - (一) 最简单的线程安全问题
NULL 博文链接:https://josh-persistence.iteye.com/blog/1923191
个人总结40个Java多线程面试问题和答案
个人总结40个Java多线程面试问题和答案,很全面,让你不再担心多线程的面试问题。
Java 单例模式线程安全问题
主要介绍了Java 单例模式线程安全问题的相关资料,希望通过本文大家能了解掌握单例模式中线程安全的使用方法,需要的朋友可以参考下
Java SimpleDateFormat线程安全问题原理详解
主要介绍了Java SimpleDateFormat线程安全问题原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Java线程池及观察者模式解决多线程意外死亡重启问题
Java线程池及观察者模式解决多线程意外死亡重启问题,附件含两个要运行代码!


