利用多线程的原理与技术,简单实现五个火车票窗口售票的程序,售完一定数量后提示“所有票已近售完”
1.方法一
public class test01 {
public static void main(String[] args) {
Ticket t = new Ticket();
Thread w1 = new Thread(t,"窗口1");// 创建5个窗口
Thread w2 = new Thread(t,"窗口2");
Thread w3 = new Thread(t,"窗口3");
Thread w4 = new Thread(t,"窗口4");
Thread w5 = new Thread(t,"窗口5") ;
w1.start();//开启线程
w2.start();
w3.start();
w4.start();
w5.start();
}
}
class Ticket implements Runnable {
private int ticket = 1;//记录车票数量
/*
* 同步锁方法
*/
public synchronized void operate() {
if (ticket < 5) {
System.out.println(Thread.currentThread().getName() + "正在买第" + ticket++ + "张票");
}else {
System.err.println(Thread.currentThread().getName() +"已经卖完最后一张票");
}
}
@Override
public void run() {
if(ticket > 0) {
operate();
try {
Thread.sleep(3000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.方法二:
public class test02 {
public static void main(String[] args) {
Ticket01 t = new Ticket01();
Thread w1 = new Thread(t, "窗口1");// 创建5个窗口
Thread w2 = new Thread(t, "窗口2");
Thread w3 = new Thread(t, "窗口3");
Thread w4 = new Thread(t, "窗口4");
Thread w5 = new Thread(t, "窗口5");
w1.start();// 开启线程
w2.start();
w3.start();
w4.start();
w5.start();
}
}
class Ticket01 implements Runnable {
private int ticket = 1;// 记录车票数量
/*
* 同步方法
*/
public void operate() {
//加同步锁
synchronized (this) {
if (ticket < 5) {
System.out.println(Thread.currentThread().getName() + "正在买第" + ticket++ + "张票");
} else {
System.err.println(Thread.currentThread().getName() + "已经卖完最后一张票");
}
}
}
@Override
public void run() {
if (ticket > 0) {
operate();
try {
Thread.sleep(3000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.执行截图: