第九周课程总结&实验报告(七)
实验任务详情:
完成火车站售票程序的模拟。
要求:
(1)总票数1000张;
(2)10个窗口同时开始卖票;
(3)卖票过程延时1秒钟;
(4)不能出现一票多卖或卖出负数号票的情况。
一.实验代码
package shiyan; class MyThread implements Runnable { private int tickets=1000; @Override public void run() { // TODO Auto-generated method stub for(int i=0;i<100;i++) { synchronized(this) { // TODO Auto-generated method stub if(tickets>0) { try { Thread.sleep(1000); } catch(InterruptedException e) { e.printStackTrace(); } System.out.println("卖票:ticket"+tickets--); } } } } } package shiyan; public class Test6 { public static void main(String[] args) { MyThread mt=new MyThread(); 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.使用同步方法解决以上问题
(1) synchronized
(2)
2.为什么我周围的一些人说这是一个很简单的作业?我是照着书写的。。
四、我的学习总结:
1.线程的创建状态
2.线程操作的主要方法
3.主线程有可能比其他线程先执行完。
4.线程的休眠:Thread.sleep()与线程调度器交互,在指定的时间内将当前线程作为等待状态放入,一旦等待时间结束后,线程状态变为可运行状态,并等待CPU进一步执行。所以当前线程的实际休眠时间依赖于线程调度器和一部门操作系统。
5.当一个线程运行的时候,另外一个线程可以直接通过interrupt()方法,中断其运行状态。
6.线程的礼让使用yield()方法将一个线程的操作暂时让给其他线程执行。