package demo;
import java.util.Random;
/**
*
*
* @author Weirdo-world
*
* java 实现多线程程序
* 1)继承Thread类
* 2)实现Runnble接口
*
* 通过多线程模拟售票窗口
* 各售票窗口不能售出同一张票
* 打印售出的票号
*/
public class Demo5 {
public static void main(String[] args) {
Demo55 d = new Demo55();
Thread t1 = new Thread(d);
t1.setName("一号售票窗口:");
Thread t2 = new Thread(d);
t2.setName("二号售票窗口:");
Thread t3 = new Thread(d);
t3.setName("三号售票窗口:");
Thread t4 = new Thread(d);
t4.setName("四号售票窗口:");
Thread t5 = new Thread(d);
t5.setName("五号售票窗口:");
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}
}
class Demo55 implements Runnable {
public int ticket = 20;
public int num = 0;
@Override
public void run() {
while (ticket > 0) {
synchronized (this) { // 同步锁:一个时间内只允许一个线程,另一个必须等待当前线程结束后再执行。(this指的是一个对象)
if (ticket > 0) {
try {
Thread.sleep(new Random().nextInt(1000)); // 休眠时间
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ticket--;
num++;
System.out.println(Thread.currentThread().getName() + "当前票号:" + num);
}
}
}
}
}