代码改变世界

第九周学习总结&实验报告七

2019-10-25 17:27  借过  阅读(144)  评论(0编辑  收藏  举报

实验报告七

实验任务详情:

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

1、实验源代码

package 实验七;

public class Ticket implements Runnable {

	private int ticket = 1000;
	
	public void salesTickets(){
		synchronized (this){
			if (ticket > 0){
				System.out.println(Thread.currentThread().getName()+"正在卖第["+ ticket-- +"]张票...");
			}
		}
	}
	public void run() {
	    while (ticket > 0){
	    	salesTickets();
	    	
	    	try{
	    		Thread.sleep(1000);
	    	}catch (InterruptedException e){
	    		e.printStackTrace();
	    	}
	    	
	    }

	}

}


 class TicketDemo {
	public static void main(String[] args){
		Ticket t = new Ticket();
		
		Thread c1 = new Thread(t,"窗口一");
		Thread c2 = new Thread(t,"窗口二");
		Thread c3 = new Thread(t,"窗口三");
		Thread c4 = new Thread(t,"窗口四");
		Thread c5 = new Thread(t,"窗口五");
		Thread c6 = new Thread(t,"窗口六");
		Thread c7 = new Thread(t,"窗口七");
		Thread c8 = new Thread(t,"窗口八");
		Thread c9 = new Thread(t,"窗口九");
		Thread c10 = new Thread(t,"窗口十");
		c1.start();
		c2.start();
		c3.start();
		c4.start();
		c5.start();
		c6.start();
		c7.start();
		c8.start();
		c9.start();
		c10.start();
	
   }

}

2、运行截图

3、本题总结
前面写的时候出现了一票多卖,注意使用同步锁synchronized(this),不然会出现一票多卖的情况,第二次判断票是否大于1,不然就会一直0,-1,-2继续卖票。

学习总结
多线程的实际运用
1、一个runnable接口只有一个run方法
2、继承Thread类需要覆写run方法
3、当多个线程对象共享信息时,用synchronized同步信息
4、run方法是定义在Thread类里面的
5、调用start方式时开始一个新线程执行定义的子任务