第九周总结
实验任务详情:
完成火车站售票程序的模拟。
要求:
(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(); } }
刚开始不知道为什么 就一直只有一个窗口输出,即使我用了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()
测试线程是否处于活动状态。