实验任务详情:
完成火车站售票程序的模拟。
要求:
(1)总票数1000张;
(2)10个窗口同时开始卖票;
(3)卖票过程延时1秒钟;
(4)不能出现一票多卖或卖出负数号票的情况。
实验代码一:
public class Mythread<tickets> implements Runnable {
private int tickets=1000;
private String name; //对窗口署名
public Mythread(String name){
this.setName(name); //对name属性赋值
}
public void run() {
for(int i=0;i<1000;i++){
synchronized (this){
if(tickets>0){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"正在售票...... 售票成功,剩余票:"+tickets--);
}
}
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
实验代码二:
public class test {
public static void main(String[] args) {
Mythread my=new Mythread<Object>(null);
Thread m1=new Thread(my,"售票口1");
Thread m2=new Thread(my,"售票口2");
Thread m3=new Thread(my,"售票口3");
Thread m4=new Thread(my,"售票口4");
Thread m5=new Thread(my,"售票口5");
Thread m6=new Thread(my,"售票口6");
Thread m7=new Thread(my,"售票口7");
Thread m8=new Thread(my,"售票口8");
Thread m9=new Thread(my,"售票口9");
Thread m10=new Thread(my,"售票口10");
m1.start();
m2.start();
m3.start();
m4.start();
m5.start();
m6.start();
m7.start();
m8.start();
m9.start();
m10.start(); //启动线程
}
}
运行结果截图:
学习总结:
1.如果在类里要激活线程,必须先做好下面两项准备:
(1)此类必须是扩展Thread类,使自己成为它的子类;
(2)线程的处理必须编写在run方法里面。
2.run()方法是定义在Thread类里的一个方法,因此把线程的程序代码编写在run()方法内,所做的就是覆写操作;
3.runnazble接口里申明了抽象的run方法,因此必须在实现Runnable接口的类里明确定义run()方法;
4.在强制某一线程运行时,采用join()方法,在线程强制运行期间,其他线程无法运行,必须等待此线程完成后才可以继续执行;
5.当多个线程对象操纵同一个共享资源时,要使用synchronized关键字进行资源的同步处理。
6.继续撸起袖子加油干!!!