黑马程序员技术交流社区
标题:
多线程模拟售票,ticket位置不同结果不一样
[打印本页]
作者:
马赛
时间:
2015-12-23 13:12
标题:
多线程模拟售票,ticket位置不同结果不一样
// 定义一个Ticket窗口,继承Thread类
class Ticket extends Thread{
// 定义票的数量
private static int tickets = 100;
// 重写run方法
public void run(){
// 使用循环
while(true){
// 判断票的数量是否满足大于0
if(tickets > 0){
System.out.println(getName()+ "出售第" + tickets + "张票");
--tickets; // 放到这里自减1,会出现3个窗口同时出现出售第100张票的情况,放到输出语句里进行自减1就不会
}else{
break;
}
}
}
// 创建一个有参的构造方法
public Ticket(String name){
super(name);
}
}
public class ThreadDemo4 {
public static void main(String[] args) {
// 创建两个线程
Ticket t0 = new Ticket("窗口1");
Ticket t1 = new Ticket("窗口2");
Ticket t2 = new Ticket("窗口3");
// 开启2个线程
t0.start();
t1.start();
t2.start();
}
}
复制代码
ticket-- 放到判断输出语句的外边时,会有3个窗口都出售第100张票的情况,
放到输出语句里边进行自减1,就不会出现这种情况
为什么?
作者:
Ansel_young
时间:
2015-12-23 14:44
线程安全的原因啊
作者:
风浪中
时间:
2015-12-23 14:47
多线程安全问题
作者:
744919632
时间:
2015-12-23 15:13
多线程。。
作者:
马赛
时间:
2015-12-23 20:53
知道了,下午讲了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2