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


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

    package test;
      
      class MyThread implements Runnable
      {
          private int ticket = 1000;
      
          public void run()
        {
              for (int i = 0; i < 1000; i++)
             {
                     synchronized (this)   
                     {
                         if (ticket > 0){
                              try{
                                  Thread.sleep(1000);
                         }catch (InterruptedException e)
                         {
                                  e.printStackTrace();
                         }
                             System.out.println(Thread.currentThread().getName() + "售票,剩余票数:" + ticket--);
                         } 
                   }
           }
         }
     }
     public class Main
     {
         public static void main(String[] args)
         {
             MyThread my=new MyThread();
             new Thread(my,"窗口一").start();
             new Thread(my,"窗口二").start();
             new Thread(my,"窗口三").start();
            new Thread(my,"窗口四").start();
             new Thread(my,"窗口五").start();
           new Thread(my,"窗口六").start();
             new Thread(my,"窗口七").start();
            new Thread(my,"窗口八").start();
            new Thread(my,"窗口九").start();
             new Thread(my,"窗口十").start();
         }
     }
    
    

    实验总结:
    1、线程的优先级
    每一个 Java 线程都有一个优先级,这样有助于操作系统确定线程的调度顺序。
    Java 线程的优先级是一个整数,其取值范围是 1 (Thread.MIN_PRIORITY ) - 10 (Thread.MAX_PRIORITY )。
    默认情况下,每一个线程都会分配一个优先级 NORM_PRIORITY(5)。
    2、Java 提供了三种创建线程的方法:
    通过实现 Runnable 接口;
    通过继承 Thread 类本身;
    通过 Callable 和 Future 创建线程。

    为了实现 Runnable,一个类只需要执行一个方法调用 run(),
    public void run();
    新线程创建之后,你调用它的 start() 方法它才会运行。
    3、Thread类的常用方法
    String getName()  返回该线程的名称。
    void setName(String name)  改变线程名称,使之与参数 name 相同。
    int getPriority()   返回线程的优先级。
    void setPriority(int newPriority)   更改线程的优先级。
    boolean isDaemon()   测试该线程是否为守护线程。
    void setDaemon(boolean on)  将该线程标记为守护线程或用户线程。
    static void sleep(long millis)
    void interrupt()  中断线程。
    static void yield()  暂停当前正在执行的线程对象,并执行其他线程。
    void join()  等待该线程终止。
    void run()
    void start()
    从Object类继承来的方法  void notify() void wait()

  • 相关阅读:
    【转载】CentOS 6.3(x86_64)下安装Oracle 10g R2 天高地厚
    Oracle查看表空间和删除表空间 天高地厚
    获取android手机的定位信息(转)
    android里pull解析xml文件
    google map 开发去掉图片阴影
    ubuntu12.04配置android开发环境遇到的问题
    google code中下载你的项目源码
    android无法自动生成R文件
    android中ocr解决方案(tesseract)
    自定义Android标题栏TitleBar布局(转)
  • 原文地址:https://www.cnblogs.com/zl010206/p/11740796.html
Copyright © 2020-2023  润新知