public class TicketDemo {
public static void main(String[] args) {
AtomicInteger tickets = new AtomicInteger(10);
for (int i = 1; i <= 20; i++) {
new Thread(() -> {
synchronized (tickets) { //锁票
if (tickets.get() > 0) {
System.out.println("人员 " + Thread.currentThread().getName() + " gets "+tickets+" ticket.");
tickets.decrementAndGet(); //票数递减
} else {
System.out.println("人员 " + Thread.currentThread().getName() + " fails to get a ticket.");
}
}
}, String.valueOf(i)).start();
}
}
}
该程序使用AtomicInteger来保证多个线程能够安全地对票数进行访问和修改。
使用synchronized关键字来确保只有一个线程可以进入共享代码块,避免了多个线程同时操作票数的情况