From d11d045369edd3ed5d1d85f38cb064333532c2c2 Mon Sep 17 00:00:00 2001 From: xuxin <840198532@qq.com> Date: Sat, 7 Mar 2026 16:24:36 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E9=98=B6day06-Lock=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E7=9A=84=E4=BD=BF=E7=94=A8=E8=A7=A3=E5=86=B3=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/inmind/lock07/Demo07.java | 20 ++++++++++++ .../src/com/inmind/lock07/TicketTask.java | 31 +++++++++++++++++++ .../Demo06.java | 2 +- .../TicketTask.java | 2 +- .../Demo05.java | 2 +- .../TicketTask.java | 2 +- 6 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 javaSE-day06/src/com/inmind/lock07/Demo07.java create mode 100644 javaSE-day06/src/com/inmind/lock07/TicketTask.java rename javaSE-day06/src/com/inmind/{syncnized_method06 => syncnized06}/Demo06.java (95%) rename javaSE-day06/src/com/inmind/{syncnized_method06 => syncnized06}/TicketTask.java (96%) rename javaSE-day06/src/com/inmind/{syncnized05 => syncnized_method05}/Demo05.java (96%) rename javaSE-day06/src/com/inmind/{syncnized05 => syncnized_method05}/TicketTask.java (97%) diff --git a/javaSE-day06/src/com/inmind/lock07/Demo07.java b/javaSE-day06/src/com/inmind/lock07/Demo07.java new file mode 100644 index 0000000..95dbc78 --- /dev/null +++ b/javaSE-day06/src/com/inmind/lock07/Demo07.java @@ -0,0 +1,20 @@ +package com.inmind.lock07; + +/* +Lock接口更加灵活地解决线程安全问题 +Lock接口的常用实现类 ReentrantLock +常用方法: +lock():获得锁 +unlock():释放锁 + */ +public class Demo07 { + public static void main(String[] args) { + //创建3个窗口来执行同一个任务 + TicketTask ticketTask = new TicketTask(); + + new Thread(ticketTask,"窗口1").start(); + new Thread(ticketTask,"窗口2").start(); + new Thread(ticketTask,"窗口3").start(); + + } +} diff --git a/javaSE-day06/src/com/inmind/lock07/TicketTask.java b/javaSE-day06/src/com/inmind/lock07/TicketTask.java new file mode 100644 index 0000000..fe1186f --- /dev/null +++ b/javaSE-day06/src/com/inmind/lock07/TicketTask.java @@ -0,0 +1,31 @@ +package com.inmind.lock07; + +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +public class TicketTask implements Runnable{ + //定义100张票电影票 + int tickeCount = 100; + Lock lock = new ReentrantLock();//多态 + + @Override + public void run() { + //有票就卖 + while (true) { + lock.lock();//让线程获取锁对象 + if (tickeCount > 0) { + try { + Thread.sleep(50); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println(Thread.currentThread().getName() + "正在卖第" + tickeCount + "张电影票"); + tickeCount--; + } else { + break; + } + //将锁对象释放,让多个线程重新争抢 + lock.unlock(); + } + } +} diff --git a/javaSE-day06/src/com/inmind/syncnized_method06/Demo06.java b/javaSE-day06/src/com/inmind/syncnized06/Demo06.java similarity index 95% rename from javaSE-day06/src/com/inmind/syncnized_method06/Demo06.java rename to javaSE-day06/src/com/inmind/syncnized06/Demo06.java index 51d9c0c..5809a09 100644 --- a/javaSE-day06/src/com/inmind/syncnized_method06/Demo06.java +++ b/javaSE-day06/src/com/inmind/syncnized06/Demo06.java @@ -1,4 +1,4 @@ -package com.inmind.syncnized_method06; +package com.inmind.syncnized06; /* synchronized能够修饰代码块和方法,修饰代码块之后就被称之为同步代码块,修饰方法之后就被称之为同步方法 diff --git a/javaSE-day06/src/com/inmind/syncnized_method06/TicketTask.java b/javaSE-day06/src/com/inmind/syncnized06/TicketTask.java similarity index 96% rename from javaSE-day06/src/com/inmind/syncnized_method06/TicketTask.java rename to javaSE-day06/src/com/inmind/syncnized06/TicketTask.java index 179c17b..6e119ca 100644 --- a/javaSE-day06/src/com/inmind/syncnized_method06/TicketTask.java +++ b/javaSE-day06/src/com/inmind/syncnized06/TicketTask.java @@ -1,4 +1,4 @@ -package com.inmind.syncnized_method06; +package com.inmind.syncnized06; public class TicketTask implements Runnable{ //定义100张票电影票 diff --git a/javaSE-day06/src/com/inmind/syncnized05/Demo05.java b/javaSE-day06/src/com/inmind/syncnized_method05/Demo05.java similarity index 96% rename from javaSE-day06/src/com/inmind/syncnized05/Demo05.java rename to javaSE-day06/src/com/inmind/syncnized_method05/Demo05.java index cc6fca0..c1062ea 100644 --- a/javaSE-day06/src/com/inmind/syncnized05/Demo05.java +++ b/javaSE-day06/src/com/inmind/syncnized_method05/Demo05.java @@ -1,4 +1,4 @@ -package com.inmind.syncnized05; +package com.inmind.syncnized_method05; /* 在java中可以使用一个关键字synchronized来解决线程安全问题. diff --git a/javaSE-day06/src/com/inmind/syncnized05/TicketTask.java b/javaSE-day06/src/com/inmind/syncnized_method05/TicketTask.java similarity index 97% rename from javaSE-day06/src/com/inmind/syncnized05/TicketTask.java rename to javaSE-day06/src/com/inmind/syncnized_method05/TicketTask.java index 4fe67ec..742b921 100644 --- a/javaSE-day06/src/com/inmind/syncnized05/TicketTask.java +++ b/javaSE-day06/src/com/inmind/syncnized_method05/TicketTask.java @@ -1,4 +1,4 @@ -package com.inmind.syncnized05; +package com.inmind.syncnized_method05; public class TicketTask implements Runnable{ //定义100张票电影票