package multi_threading;
/*
- 实验11。3——售票程序
- 1.实验目的:
-
学习线程的同时运行
-
掌握一个类直接继承Thread类和实现Runnable接口实现多线程的区别
- 2.实验要求
-
用程序模拟售票系统,实现4个售票点发售某日某次列车的0张车票
- 3.实验指导
-
直接继承Thread类和实现Runnable接口都能实现多线程,再写一个程序对比两者的区别
*/
```java
public class Sale {
public static void main(String[] args) {
SaleTickets t = new SaleTickets();
//1.封闭创建4个线程,都传入参数t,再启动他们
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
}
class SaleTickets implements Runnable{
private int tickets = 1;
public void run() {
while(true) {
if(tickets<=100)
System.out.println(Thread.currentThread().getName()+"销售第"+tickets++ +"票");
else
break;
}
}
}
package multi_threading;
/*
* 这样写,只有一个线程再运行,一个线程对象只能启动一个线程,
* 无论调用多少遍start()方法,结果都只有一个线程
*/
public class SaleA {
public static void main(String[] args) {
Thread t = new Thread(new SaleTickets());
t.start();
t.start();
t.start();
t.start();
}
}
package multi_threading;
/*
* 这里的四个线程是各自卖各自的100张票,而不是共同的100张票
* 要实现售票,只能创建一个资源对象,但要创建多个线程区处理同一个资源独享,用程序模板中的程序就能实现这样的效果
* 实现Runnable接口可以避免由于Java的单一继承特性带来的局限,并且适合多个相同程序代码的线程区处理同一资源的情况
*/
public class SaleB {
public static void main(String[] args) {
new SaleTicket().start();
new SaleTicket().start();
new SaleTicket().start();
new SaleTicket().start();
}
}
class SaleTicket extends Thread{
private int tickets = 1;
public void run() {
while(true) {
if(tickets<=100)
System.out.println(Thread.currentThread().getName()+"销售第"+tickets++ +"票");
else
break;
}
}
}