• 第九周课程总结&实验报告(七)


    实验任务详情:

    完成火车站售票程序的模拟。
    要求:
    (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)过多的同步操作有可能会带来死锁问题,导致程序进入到停带状态。

  • 相关阅读:
    快乐来源的研究
    这可能是经历中真实的农村
    golang入门到实战教程
    免费开源pdf阅读器SumatraPDF
    农村题材光棍儿
    在线头像卡通化
    微软出品电脑管家
    刚毕业的大学生、失业的父亲:父子返乡
    ApplicationEventPublisher的简单使用
    mysql里使用JSON_EXTRACT取值
  • 原文地址:https://www.cnblogs.com/zh2250881784/p/11740316.html
Copyright © 2020-2023  润新知