public class TicketRunnable implements Runnable {
private final int ticketSize = 100;
private final int peopleSize = 200;
private int ticketNum;
private int peopleNum;
@Override
public void run() {
while (ticketNum < ticketSize && peopleNum < peopleSize) {
synchronized (this) {
if (ticketNum < ticketSize && peopleNum < peopleSize) {
if ((int) (Math.random() * 10) % 2 == 1) {
System.out.println(Thread.currentThread().getName() + " 第 " + (++peopleNum) + " 个人抢到第 " + (++ticketNum) + " 张票");
try {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println(Thread.currentThread().getName() + " 第 " + (++peopleNum) + " 个人未抢到票");
}
}
}
}
}
}
public class TestTicket {
public static void main(String[] args) {
TicketRunnable tr = new TicketRunnable();
Thread t1 = new Thread(tr, "窗口A");
Thread t2 = new Thread(tr, "窗口B");
Thread t3 = new Thread(tr, "窗口C");
Thread t4 = new Thread(tr, "窗口D");
t1.start();
t2.start();
t3.start();
t4.start();
}
}