第九周学习总结&实验报告七
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方式时开始一个新线程执行定义的子任务