SellTicket.java 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package J20250730.demo10_lock;
  2. import java.util.concurrent.locks.Lock;
  3. import java.util.concurrent.locks.ReentrantLock;
  4. /**
  5. * @author WanJl
  6. * @version 1.0
  7. * @title SellTicket
  8. * @description 同步方法
  9. * @create 2025/7/30
  10. */
  11. public class SellTicket implements Runnable {
  12. //总共100张票
  13. private int tickets = 100;
  14. //创建可重入锁对象
  15. private Lock lock = new ReentrantLock();
  16. @Override
  17. public void run() {
  18. String name = Thread.currentThread().getName();
  19. while (true) {
  20. try {
  21. //加锁
  22. lock.lock();
  23. if (tickets > 0) {
  24. try {
  25. Thread.sleep(10);
  26. } catch (InterruptedException e) {
  27. e.printStackTrace();
  28. }
  29. //显示XX窗口成功售票
  30. System.out.println(name + "售票1张,还剩" + --tickets + "张票");
  31. }
  32. } catch (Exception e) {
  33. e.printStackTrace();
  34. } finally {
  35. //锁必须要释放
  36. lock.unlock();
  37. }
  38. }
  39. }
  40. }