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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fmi110 高级黑马   /  2015-9-23 12:22  /  174 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

a
  1. package ticket.demo;

  2. import java.util.concurrent.locks.Lock;
  3. import java.util.concurrent.locks.ReentrantLock;

  4. public class SellDemo3 {
  5.         /**
  6.          * 使用lock实现同步卖票程序模拟
  7.          */
  8.         public static void main(String[] args) {
  9.                 int ticket = 100;// 设置票的初始值
  10.                 final SharedData sd = new SellDemo3().new SharedData(ticket);
  11.                 for (int i = 0; i < 3; i++) {
  12.                         new Thread(new Runnable() {
  13.                                 @Override
  14.                                 public void run() {
  15.                                         while (true)
  16.                                                 sd.dec();
  17.                                 }
  18.                         }, "window" + i).start();
  19.                 }

  20.         }

  21.         // 使用内部类,实现票的共享和操作
  22.         class SharedData {
  23.                 private int ticket;
  24.                 private Lock l = new ReentrantLock();// 创建锁

  25.                 private SharedData(int ticket) {
  26.                         this.ticket = ticket;
  27.                 }

  28.                 // 卖票
  29.                 public void dec() {
  30.                         // 实现同步
  31.                         l.lock();// 在访问共享数据前就进行同步
  32.                         if (ticket > 0) {
  33.                                 try {
  34.                                         ticket--;
  35.                                         System.out.println(Thread.currentThread().getName()
  36.                                                         + "...Ticket = " + ticket);
  37.                                 } finally {
  38.                                         l.unlock();
  39.                                 }
  40.                         } else {
  41.                                 System.out.println("售罄~~");
  42.                                 System.exit(0);
  43.                         }
  44.                 }
  45.         }
  46. }
复制代码


0 个回复

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