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

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

1)实验代码


package work;

public class Maipiao 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);

              }
          }
      }

  }
}

测试



package work;

public class Text {

  public static void main(String[] args) {
  	Maipiao mt=new Maipiao();
      
      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)运行截图

课程总结

创建多线程的方式
Java中线程的创建有如下三种基本形式。

1、继承Thread类,重写该类的run()方法。
2、实现java.lang.Runnable接口
3、使用Callable和Future接口创建线程。

线程睡眠——sleep()

sleep()是Thread类的静态方法。该方法声明抛出了InterrupedException异常。所以使用时,要么捕捉,要么声明抛出。有两种重载方式:


static void sleep(long millis); //让当前正在执行的线程暂停millis毫秒,并进入阻塞状态,该方法受到系统计时器和线程调度器的精度和准度的影响。

static void sleep(long millis , int nanos);  //让当前正在执行的线程暂停millis毫秒加nanos微秒,并进入阻塞状态,该方法受到系统计时器和线程调度器的
精度和准度的影响。

File类的构造方法



public File(String pathname)-->实例化File类的时候,必须设置号路径。

posted @ 2019-10-25 12:52  青成雪  阅读(142)  评论(1编辑  收藏  举报