123456789101112131415161718192021222324252627282930313233343536373839 |
- package com.sf.javase.thread.sync;
- import lombok.SneakyThrows;
- // 解决买票的超卖问题
- public class Ticket {
- public static void main(String[] args) {
- Window window = new Window();
- // 三个线程使用同一个window对象
- // 一个window对象 只有一个lock对象 所以使用的是同一把锁
- new Thread(window, "t1").start();
- new Thread(window, "t2").start();
- new Thread(window, "t3").start();
- }
- private static class Window implements Runnable {
- private int ticketsNum = 100;
- // 创建一个对象 用对象来加锁
- Object lock = new Object();
- // lombok提供了一个处理异常的注解
- @SneakyThrows
- @Override
- public void run() {
- while (true) {
- // 同步代码块
- synchronized (lock) {
- if (ticketsNum > 0) {
- Thread.sleep(100);
- System.out.println(Thread.currentThread().getName() + " : " + ticketsNum--);
- }
- }
- }
- }
- }
- }
|