第九周总结

实验任务详情:

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

 

class Ticket implements Runnable{
    
    private  int tickets =1000;

    @Override
    public void run() {
        for (int i=0;i<1000;i++) {
            synchronized(this) {
                if(tickets>0) {
                    
                    try {
                        Thread.sleep(1000);
                    }catch(InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName()+"卖票:tickets="+tickets);
                    tickets--;
                    if(tickets==0) {
                        System.out.println("票已售完");
                    }
                }
                else {
                    break;
                }
            }
        }
        }
}
public class Demo {

    public static void main(String[] args) {
        Ticket mt=new Ticket();
        Thread t1=new Thread(mt,"窗口1");
        Thread t2=new Thread(mt,"窗口2");
        Thread t3=new Thread(mt,"窗口3");
        Thread t4=new Thread(mt,"窗口4");
        Thread t5=new Thread(mt,"窗口5");
        Thread t6=new Thread(mt,"窗口6");
        Thread t7=new Thread(mt,"窗口7");
        Thread t8=new Thread(mt,"窗口8");
        Thread t9=new Thread(mt,"窗口9");
        Thread t10=new Thread(mt,"窗口10");
        
        t1.start();
        t2.start();
        t3.start();
        t4.start();
        t5.start();
        t6.start();
        t7.start();
        t8.start();
        t9.start();
        t10.start();

    }

}

第九周总结_第1张图片第九周总结_第2张图片

刚开始不知道为什么 就一直只有一个窗口输出,即使我用了Runnable。 后面重新打了几遍才正确。

学习总结:

线程的优先级

每一个 Java 线程都有一个优先级,这样有助于操作系统确定线程的调度顺序。

Java 线程的优先级是一个整数,其取值范围是 1 (Thread.MIN_PRIORITY ) - 10 (Thread.MAX_PRIORITY )。

默认情况下,每一个线程都会分配一个优先级 NORM_PRIORITY(5)。

 

Java 提供了三种创建线程的方法:

  • 通过实现 Runnable 接口;
  • 通过继承 Thread 类本身;
  • 通过 Callable 和 Future 创建线程。
  • 为了实现 Runnable,一个类只需要执行一个方法调用 run(),
  • public void run()
  • 新线程创建之后,你调用它的 start() 方法它才会运行。
  • Thread 方法

    下表列出了Thread类的一些重要方法:

    序号 方法描述
    1 public void start()
    使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
    2 public void run()
    如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。
    3 public final void setName(String name)
    改变线程名称,使之与参数 name 相同。
    4 public final void setPriority(int priority)
     更改线程的优先级。
    5 public final void setDaemon(boolean on)
    将该线程标记为守护线程或用户线程。
    6 public final void join(long millisec)
    等待该线程终止的时间最长为 millis 毫秒。
    7 public void interrupt()
    中断线程。
    8 public final boolean isAlive()
    测试线程是否处于活动状态。

你可能感兴趣的:(第九周总结)