线程lock(锁) 15
ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,
比较常用的是ReentrantLock,可以显示式加锁。
-
synchronized与Lock的对比:1. Lock是显示锁 ( 手动开启和关闭锁,别忘记关闭锁 ) synchronized是
隐式锁,出了作用域自动释放。
2. Lock只有代码块锁,synchronized有代码块锁和方法锁。
3. 使用Lock锁,JVM将花费较少的时间来调度线程,性能更好,
4.优先使用顺序:Lock> 同步代码块(已经进入方法体,分配了相应资源
)> 同步方法(在方法体之外)
class A
{
private ReentrantLock = new ReenTrantLock();
public void m()
{
lock.lock();//加锁
try{
//保证线程安代码。
}
finally{
lock.unlock();//解锁
//如果同步代码有异常,要将unlock写入finally语句块
}
}
}
package Runnable1;
import java.util.concurrent.locks.ReentrantLock;
//测试lock锁
//抢票
public class TestLock
{
public static void main(String[] args) {
TestLock2 testLock2=new TestLock2();
new Thread(testLock2,"我").start();
new Thread(testLock2,"你").start();
new Thread(testLock2,"他").start();
}
}
class TestLock2 implements Runnable
{
int ticketNums=10;
//定义lock锁
private final ReentrantLock lock=new ReentrantLock();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY