Java基础学习:多线程23(Lock锁 )
-
Lock锁:
-
从JDK5.0开始,Java提供了更强大的线程同步机制:通过显式定义同步锁对象来实现同步;同步锁使用Lock对象充当;
-
java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具;锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象;
-
ReentrantLock
-
-
synchronized:是隐式锁:锁了谁,不太好确定;
-
ReentrantLock:可重入锁
-
synchronized和Lock的对比:
-
Lock是显式锁(手动开启和关闭锁,别忘了关闭锁);synchronized是隐式锁,处理作用域自动释放;
-
Lock只有代码块锁,synchronized有代码块和方法锁;
-
使用Lock锁,JVM将花费较少的时间来调度线程,性能更好。并且具有更好的扩展性(提供更多的子类)
-
优先使用:
-
Lock > 同步代码块(已经进入了方法体,分配了相应资源)> 同步方法(在方法体之外)
-
-
-
代码案例:
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 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律