进阶day06-Lock接口的使用解决线程安全问题

This commit is contained in:
2026-03-07 16:24:36 +08:00
parent 9c67741e28
commit d11d045369
6 changed files with 55 additions and 4 deletions

View File

@@ -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();
}
}

View File

@@ -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();
}
}
}

View File

@@ -1,4 +1,4 @@
package com.inmind.syncnized_method06;
package com.inmind.syncnized06;
/*
synchronized能够修饰代码块和方法,修饰代码块之后就被称之为同步代码块,修饰方法之后就被称之为同步方法

View File

@@ -1,4 +1,4 @@
package com.inmind.syncnized_method06;
package com.inmind.syncnized06;
public class TicketTask implements Runnable{
//定义100张票电影票

View File

@@ -1,4 +1,4 @@
package com.inmind.syncnized05;
package com.inmind.syncnized_method05;
/*
在java中可以使用一个关键字synchronized来解决线程安全问题.

View File

@@ -1,4 +1,4 @@
package com.inmind.syncnized05;
package com.inmind.syncnized_method05;
public class TicketTask implements Runnable{
//定义100张票电影票