实验任务详情:

完成火车站售票程序的模拟。
要求:
(1)总票数1000张;
(2)10个窗口同时开始卖票;
(3)卖票过程延时1秒钟;
(4)不能出现一票多卖或卖出负数号票的情况。

1.代码

package test;

public class test implements Runnable {
  private int ticket = 1000;

  public void run() {

      for (int i = 1; i <= 1000; i++) {
          synchronized (this) {
              if(ticket==0) {
                  System.out.println(Thread.currentThread().getName() + "票已售完!");
                  break;
              }
              if (ticket > 0) {
                  ticket--;
                  try {
                      Thread.sleep(0);
                  } catch (InterruptedException e) {
                      e.printStackTrace();
                  }
                  System.out.println(Thread.currentThread().getName() + " 买出一张票    余票:ticket=" + ticket);

              }
          }
      }

  }

  public static void main(String[] args) {
      test mt=new test();
      
      new Thread(mt,"窗口1").start();
      new Thread(mt,"窗口2").start();
      new Thread(mt,"窗口3").start();
      new Thread(mt,"窗口4").start();
      new Thread(mt,"窗口5").start();
      new Thread(mt,"窗口6").start();
      new Thread(mt,"窗口7").start();
      new Thread(mt,"窗口8").start();
      new Thread(mt,"窗口9").start();
      new Thread(mt,"窗口10").start();
      
  }

}

2.运行截图

3.总结

同步与锁死的使用:多线程共享同一资源时需要进行同步,以保证资源操作的完整性,但是过多的同步就可能产生死锁。

(1)多个线程访问同一资源时,考虑数据操作的安全性问题,一定要使用同步操作。同步有以下
两种操作模式:
① 同步代码块:synchronized(锁定对象)(代码)
② 同步方法:public syncbronized 返回值 方法名称(){代码}
(2)过多的同步操作有可能会带来死锁问题,导致程序进入到停带状态。

 posted on 2019-10-25 19:35  有点无奈  阅读(128)  评论(1编辑  收藏  举报