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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hero_king 中级黑马   /  2016-6-1 22:22  /  481 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

卖票案例线程安全问题,出现重复的票数和负票的解决方案。
线程安全问题出现的前提:多线程环境,存在共享数据,存在多个线程同时操作共享数据。
  1. /*
  2. * 买票系统解决线程安全问题案例
  3. */
  4. public class SellTicketDemo {
  5. public static void main(String[] args) {
  6.   
  7.   SellTicket st = new SellTicket();
  8.   
  9.   Thread th1 = new Thread(st, "窗口1:");
  10.   Thread th2 = new Thread(st, "窗口2:");
  11.   Thread th3 = new Thread(st, "窗口3:");
  12.   
  13.   th1.start();
  14.   th2.start();
  15.   th3.st<div class="blockcode"><blockquote>public class SellTicket implements Runnable {
  16.         // 创建票
  17.         private int ticket = 100;
  18.         // 创建锁对象
  19.         private Object obj = new Object();

  20.         @Override
  21.         public void run() {
  22.                 while (ticket > 0) {
  23.                         synchronized (obj) {
  24.                                 if (ticket > 0) {
  25.                                         try {
  26.                                                 Thread.sleep(100);
  27.                                         } catch (InterruptedException e) {
  28.                                                 e.printStackTrace();
  29.                                         }
  30.                                         System.out.println(Thread.currentThread().getName()
  31.                                                         + "正在出售第" + (ticket--) + "张票");
  32.                                 }
  33.                         }
  34.                 }

  35.         }

  36. }
复制代码

art();
}
}



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马