问题:
模拟火车站卖票:共有100张票,实现10个站台同时售票,不能出现多卖。
以下分别用 Thread 、 Runnable 、线程池 、Callable 实现 ;分别以 synchronized 和 ReentrantLock 进行加锁。
图方便,所有线程都以匿名内部类创建,若觉得结构不清晰可以自己创建Thread/Runnable/Callable 类再创建线程。
1.synchronized锁、匿名内部类thread实现
/*
* 多线程售票
* synchronized锁、匿名内部类thread实现
*/
public class SellTickets {
static int ticket = 100;
static int count;
public static void main(String[] args) {
for(int i=0;i<10;i++) {
new Thread() {
public void run() {
synchronized (SellTickets.class) {
while(ticket > 0 ) {
SellTickets.class.notifyAll();
count++;
System.out.println("站台["+Thread.currentThread().getId()+"]出售了第"+ticket+"张票,总共出售的票数:"+count);
ticket--;
try {
SellTickets.class.wait(10);
} catch (Interrupt