实验任务详情:
完成火车站售票程序的模拟。
要求:
(1)总票数1000张;
(2)10个窗口同时开始卖票;
(3)卖票过程延时1秒钟;
(4)不能出现一票多卖或卖出负数号票的情况。
实验代码
package Demo6;
class MyThread implements Runnable{
private int ticket=1000;
public void run() {
for(int i=0;i<10000;i++) {
this.sale();
}
}
public synchronized void sale() {
if(ticket>0) {
try {
Thread.sleep(1000);
}catch(Exception e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"运行,i="+ticket--);
}
}
};
public class Pluto {
public static void main(String[] args) {
MyThread my=new MyThread();
new Thread(my,"窗口A").start();
new Thread(my,"窗口B").start();
new Thread(my,"窗口C").start();
new Thread(my,"窗口D").start();
new Thread(my,"窗口E").start();
new Thread(my,"窗口F").start();
new Thread(my,"窗口G").start();
new Thread(my,"窗口H").start();
new Thread(my,"窗口I").start();
new Thread(my,"窗口J").start();
}
}
实验截图
实验总结:
本周的实验题目在书上有相关的代码,我的代码是按照书上的来写的,改了一些需要修改的地方。
个人感觉如果要多线程进行售票,应该需要用到死锁,但是不会用。
学习总结:
在Java中,实现多线程代码有两种方式:一种是继承Thread类;另一种是实现Runnable接口。
继承Thread类
多线程的定义语法:
class 类名称 extends Thread{
属性***;
方法***;
public void run(){
线程主体;
}
}
如果想正确的启动线程,是不能直接调用run()方法的,而是应该调用从Thread类中继承而来的start()方法。
在线程启动时虽然调用的start()方法,但实际上调用的是run()方法的主体。
实现Runnable接口:
在java中也可以通过实现Runnable接口的方式实现多线程。此接口定义如下:
public interface Runnable{
public void run();
}
通过Runnable接口实现多线程:
class 类名称 implements Runnable{
属性***;
方法***;
public void run(){
线程主体;
}
}