首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Lock锁

*创建对象 Lock lock = new ReentrantLock() ,加锁与释放锁⽅法如下:

* public void lock():加同步锁

* public void unlock():释放同步锁

*

* synchronized和Lock的对比:

*

* Lock是显式锁(手动开启和关闭锁,别忘记关闭),synchronized是隐式锁,除了作用域就自动释放。

* Lock只是代码块锁(执行体放在开启锁和关闭锁中间),synchronized有代码块锁和方法锁。

*使用Lock锁,JVM将花费较少的时间来调度线程,性能更好。并且具有更好的扩展性(提供更多的子类)。

*优先使用顺序:Lock > 同步代码块(已经进入了方法体,分配了相应资源) > 同步方法(在方法体之外)。

*/

public class MyLock{

public static void main(String[] args) throws InterruptedException {

TestLock testLock = new TestLock();

new Thread(testLock,"a").start();

new Thread(testLock,"b").start();

new Thread(testLock,"c").start();

}

}

class TestLock implements Runnable {

//车票

private static int tickerNum = 10;

//创建一个Lock锁

private final Lock lock = new ReentrantLock();

@Override

public void run() {

while (true) {

lock.lock(); //加锁

try {

//判断是否还有票

if (tickerNum > 0) {

//模拟延时

try {

Thread.sleep(100);

} catch (InterruptedException e) {

e.printStackTrace();

}

} else {

break;

}

} finally {

lock.unlock(); //解锁

}

}

}

}

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OX08zimtKrM5A_Th7PPxVGRg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券