diff --git a/s-day06/src/com/inmind/thread_safe_lock07/Demo08.java b/s-day06/src/com/inmind/thread_safe_lock07/Demo08.java new file mode 100644 index 0000000..c22dcce --- /dev/null +++ b/s-day06/src/com/inmind/thread_safe_lock07/Demo08.java @@ -0,0 +1,17 @@ +package com.inmind.thread_safe_lock07; + +/* +Lock接口的常用实现类 ReentrantLock +常用方法: +lock():加锁 +unlock():释放锁 + */ +public class Demo08 { + public static void main(String[] args) { + //创建卖票任务 + TicketTask ticketTask = new TicketTask(); + new Thread(ticketTask, "窗口1").start(); + new Thread(ticketTask,"窗口2").start(); + new Thread(ticketTask,"窗口3").start(); + } +} diff --git a/s-day06/src/com/inmind/thread_safe_lock07/TicketTask.java b/s-day06/src/com/inmind/thread_safe_lock07/TicketTask.java new file mode 100644 index 0000000..94be1c2 --- /dev/null +++ b/s-day06/src/com/inmind/thread_safe_lock07/TicketTask.java @@ -0,0 +1,33 @@ +package com.inmind.thread_safe_lock07; + +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +//卖票任务:就是卖100张票 +public class TicketTask implements Runnable{ + int ticketCount = 100;//100张票 + Lock lock = new ReentrantLock();//Lock对象 + + @Override + public void run() { + //有票就卖 + while (true) { +// synchronized (lock){//同步代码块:只有拥有锁对象的线程才能进入同步代码块去执行 + lock.lock();//加锁 + //如果有票就卖 + if (ticketCount > 0) { + try { + Thread.sleep(50); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println(Thread.currentThread().getName() + "正在卖第" + ticketCount + "张票"); + ticketCount--; + } else { + break; + } + lock.unlock();//释放锁 +// }//当线程执行完毕该同步代码块之后,锁对象就会释放 + } + } +}