第九周学习总结&实验报告(7)
完成火车站售票程序的模拟。
要求:
(1)总票数1000张;
(2)10个窗口同时开始卖票;
(3) 卖票过程延时1秒钟;
(4)不能出现一票多卖或卖出负数号票的情
况
实验代码:
package y;
class MyThread implements Runnable{
private int ticket=1000;
public void run(){
for(int i=0;i<=1000;i++){
this.sales();
}
}
public synchronized void sales(){
if(ticket>0){
try{
Thread.sleep(1000);
}
catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":"+ticket--);
}
}
}
package y;
public class Demo2{
public static void main(String[] args){
MyThread my=new MyThread();
new Thread(my,"窗口1").start();
new Thread(my,"窗口2").start();
new Thread(my,"窗口3").start();
new Thread(my,"窗口4").start();
new Thread(my,"窗口5").start();
new Thread(my,"窗口6").start();
new Thread(my,"窗口7").start();
new Thread(my,"窗口8").start();
new Thread(my,"窗口9").start();
new Thread(my,"窗口10").start();
}
}
运行结果:
学习总结:
1.线程状态:
创建状态->就绪状态(新建状态以后,调用该线程的start()就可以启动线程)->运行状态->堵塞状态(一个正在执行的线程在某些特殊情况下,如果被人为的挂起或需要执行耗时的输入操作时,会让出CPU并中止自己的执行)->死亡状态(线程调用spot()方法或run()方法执行结束后,即处于死亡状态)
2.线程操作的相关方法:
3.线程的强制运行:
在线程操作中,可以使用join()方法让一个线程强制运行。在线程强制运行期间,其他线程无法运行,必须等待此线程完成之后才能继续执行。
join()方法会抛出InterruptedException的异常,所以编程时必须把join()方法写在Try...catch块内。
4.线程的休眠:
使用Thread.sleep()方法既可以允许一个线程进行暂时的休眠。
5.File类: