下面通过代码来演示一下 代码解释:首先我们模拟多人抢票的场景,首先规定票数只有10张,然后我们通过票数判断是否已经被购完。在没有加入 ReentrantLock 之前,我们模拟的这个抢票场景会出现数据不一致问题,然后我们通过定义 ReentrantLock 锁,通过 lock.lock() 方法来显式加锁,通过 lock.unlock() 方法来显式解锁。这样就可以保证我们的数据一致性问题。
Lock锁
可重入锁
package org.javaboy.juc; import java.util.concurrent.locks.ReentrantLock; /** * @Author: bai * @DateTime: 2020/6/7 21:02 */ public class TestLock implements Runnable { int ticketNums = 10; private final ReentrantLock lock = new ReentrantLock(); // 定义lock锁 @Override public void run() { while (true) { try { lock.lock();// 显式加锁 if (ticketNums > 0) { try { Thread.sleep(100); // 模拟延时操作 System.out.println(Thread.currentThread().getName() + "::" + ticketNums--); } catch (InterruptedException e) { e.printStackTrace(); } } else { break; } } finally { lock.unlock(); // 显示解锁 } } } public static void main(String[] args) { TestLock testLock = new TestLock(); new Thread(testLock, "小明").start(); new Thread(testLock, "小李").start(); new Thread(testLock, "黄牛党").start(); } }
注意:一般我们显示加锁和解锁建议写在try/catch块中,这样就算发生了异常,finall 块依旧能够执行,我们的锁也可以被释放。这样就保证了程序的最起码的健壮性。synchronized 与 Lock 的对比
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算