A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. // 定义一个Ticket窗口,继承Thread类
  2. class Ticket extends Thread{
  3.        
  4.         // 定义票的数量
  5.         private static int tickets = 100;
  6.        
  7.         // 重写run方法
  8.         public void run(){
  9.                
  10.                 // 使用循环
  11.                 while(true){
  12.                        
  13.                         // 判断票的数量是否满足大于0
  14.                         if(tickets > 0){
  15.                                 System.out.println(getName()+ "出售第" + tickets + "张票");
  16.                                 --tickets;  //  放到这里自减1,会出现3个窗口同时出现出售第100张票的情况,放到输出语句里进行自减1就不会
  17.                         }else{
  18.                                 break;
  19.                         }
  20.                 }
  21.                        
  22.         }
  23.        
  24.         // 创建一个有参的构造方法
  25.         public Ticket(String name){
  26.                 super(name);
  27.         }
  28. }

  29. public class ThreadDemo4 {
  30.         public static void main(String[] args) {
  31.                
  32.                 // 创建两个线程
  33.                 Ticket t0 = new Ticket("窗口1");
  34.                 Ticket t1 = new Ticket("窗口2");
  35.                 Ticket t2 = new Ticket("窗口3");
  36.                
  37.                 // 开启2个线程
  38.                 t0.start();
  39.                 t1.start();
  40.                 t2.start();
  41.                
  42.         }
  43. }
复制代码
ticket-- 放到判断输出语句的外边时,会有3个窗口都出售第100张票的情况,
         放到输出语句里边进行自减1,就不会出现这种情况
为什么?

4 个回复

倒序浏览
Ansel_young 来自手机 中级黑马 2015-12-23 14:44:41
沙发
线程安全的原因啊
回复 使用道具 举报
多线程安全问题
回复 使用道具 举报
多线程。。
回复 使用道具 举报
知道了,下午讲了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马