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张票电影票