首页 > 其他分享 >Lock(锁)的使用 ReentrantLock

Lock(锁)的使用 ReentrantLock

时间:2023-08-25 15:45:06浏览次数:31  
标签:testLock2 Thread lock ReentrantLock 使用 Lock new

Lock(锁)

1. synchronized 与Lock的对比
  1. Lock是显式锁(手动开启和关闭锁,别忘记关闭锁)synchronized是隐式锁,出了作用域自动释放。

  2. Lock只有代码块锁,synchronized有代码块锁和方法锁

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

  4. 优先使用顺序:

  5. Lock >同步代码块(已经进入了方法体,分配了相应资源)>同步方法(在方法体之外)

2.lock锁的使用: private ReentrantLock lock = new 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 ReentrantLock lock = new ReentrantLock();

   @Override
   public void run() {
       while (true){
           try {
               lock.lock(); //加锁
               if(ticketNums>0){
                   try {
                       Thread.sleep(100);
                  } catch (InterruptedException e) {
                       throw new RuntimeException(e);
                  }
                   System.out.println(ticketNums--);
              }else{
                   break;
              }
          }finally {
               // 解锁
               lock.unlock();
          }

      }
  }
}
 

标签:testLock2,Thread,lock,ReentrantLock,使用,Lock,new
From: https://www.cnblogs.com/yuan947022015/p/17657117.html

相关文章

  • 如何在浏览器中启用 WebGL 以使用 HTML5 3D 查看器
    描述WebCenter中的HTML53DColladaViewer(自14.1以来新增)要求在浏览器中启用WebGL。较旧的浏览器可能不支持此功能,或者要求用户首先显式启用此功能。本页介绍如何为所有主要浏览器启用此功能。WebGL3D查看器本文是以下超级用户文章的摘要:如何在浏览器中启用WebGL?程序......
  • Pandas 使用教程 Series、DataFrame
    目录Series(一维数据)指定索引值使用key/value对象,创建对象设置Series名称参数DataFrame(二维数据)使用字典(key/value)创建loc属性返回指定行的数据Pandas一个强大的分析结构化数据的工具集,基础是Numpy(提供高性能的矩阵运算)Pandas可以从各种文件格式比如CSV、JSON、SQL、M......
  • HTTP代理什么是反向HTTP代理?反向HTTP代理的工作原理及使用场景
    反向HTTP代理是一种网络服务,它可以帮助服务器绕过一些访问限制,如IP封锁、访问频率限制等,以便服务器可以正常提供服务。本文将介绍反向HTTP代理的定义、工作原理、应用场景以及注意事项。反向HTTP代理是一种网络服务,它充当了服务器和客户端之间的中介,通过代理服务器来转发客户端的请......
  • HarmonyOS/OpenHarmony(Stage模型)卡片开发应用上下文Context使用场景一
    1.获取应用文件路径基类Context提供了获取应用文件路径的能力,ApplicationContext、AbilityStageContext、UIAbilityContext和ExtensionContext均继承该能力。应用文件路径属于应用沙箱路径。上述各类Context获取的应用文件路径有所不同。通过ApplicationContext获取应用级别的应用......
  • Heikin-Ashi怎么用,FPmarkets澳福找到3个使用环境
    所有赚到钱的交易者都在告诉你Heikin-Ashi是个能赚到钱的交易指标,但是没有一个赚到钱的交易者告诉你如何使用Heikin-Ashi交易指标赚到钱。其实很简单,只要理解Heikin-Ashi的这3个使用环境,如果不好使,FPmarkets澳福帮你账户充值1000块钱。第一个使用环境  Heikin-Ashi典型蜡烛图经常......
  • Linux CPU 使用率统计
    CPU使用率统计脚本:for((i=0;i<10000;++i))dotop-n1|awk-F'[,|]+'/'%Cpu'/'{printf("%s%.01f\n",strftime("[%Y-%m-%d%H:%M:%S]",systime()),100-$11);}';sleep1;done运行效果:$for((i=0;i<10000;++i))do......
  • svn服务端安装和使用
    首先去官网下载安装包点我下载 下载完了以后选择安装路径然后一直next就可以了安装完了以后在开始菜单里面找到svn打开 如何使用? 这里是创建代码管理的存储库 点击repositories-》右边空白处右键-》createnewrepository-》next-》填写代码管理库的名称......
  • php读取excel数据 使用phpspreadsheet
    首先是用composer安装phpoffice/phpspreadsheet具体代码//读取数据privatefunctionreadYewuExcel(){$reader=IOFactory::createReader("Xlsx");$reader->setReadDataOnly(TRUE);$spreadsheet=$reader->load('yewu.xlsx');......
  • Git安装和使用
    需要安装三个软件1、git客户端点击下载 下载完成后一只next就行了。2、git右键属性的扩展程序点击下载 下载完成后一只next就行了3、git中文包点击下载 下载完成后一只next就行了以上三个都安装完了以后,使用右键就会出现TrotoiseGit的选项我使用的是阿里云云效......
  • Cognex InSight 相机的连接与仿真的使用
    1.连接相机至InSight网络:1.相机供电/连接PC智能相机的供电分两种:不同系列的视觉系统供电方式有差异,具体请查阅手册①POE电源供电②开关电源供电2.在InSight中配置相机IP地址:选择:系统>>>将传感器/设备添加到网络然后单击相机图标,右侧会显示当前相机的IP和子网掩码信息,选择......