第九周课程总结与实验报告
第九周课程总结&实验报告(七)
完成火车站售票程序的模拟。
要求:
(1)总票数1000张;
(2)10个窗口同时开始卖票;
(3)卖票过程延时1秒钟;
(4)不能出现一票多卖或卖出负数号票的情况。
实验代码:
package 测试; public class MyThread implements Runnable{ 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--+"张票"); if(ticket==0) { System.out.println("票已卖完,停止售票"); break; } } } } } }
public class 测试0 { public static void main(String[] args) { MyThread mt=new MyThread(); System.out.println("票数充足,开始售票"); new Thread(mt,"第一号窗口").start(); new Thread(mt,"第二号窗口").start(); new Thread(mt,"第三号窗口").start(); new Thread(mt,"第四号窗口").start(); new Thread(mt,"第五号窗口").start(); new Thread(mt,"第六号窗口").start(); new Thread(mt,"第七号窗口").start(); new Thread(mt,"第八号窗口").start(); new Thread(mt,"第九号窗口").start(); new Thread(mt,"第十号窗口").start(); } }
实验截图:
实验总结:创新思维太少了,优化不了代码,能力有限,老师虽然讲了,但还是么进脑子,难搞...
课程总结:
线程的状态
书的256页,要注意阻塞状态到就绪状态在等待系统CPU的调度
Thread类和Runnable接口的区别
继承Thread类不能资源共享,实现Runnable接口可以资源共享,但是在卖火车票的例子中可以看到出现了负票的情况,所以使用同步解决问题
同步代码块:
synchronized(同步对象){ 需要同步的代码; }