首页 > 其他分享 >lock锁

lock锁

时间:2023-11-27 10:02:48浏览次数:26  
标签:同步 synchronized lock 代码 ReentrantLock 线程

从jdk5.0开始,Java提供了更为强大的的线程同步机制----通过显示定义同步锁对象来实现同步。
同步锁使用lock对象充当
Java.util.concurrent.locks.lock接口是控制多线程对共享资源进行访问的工具。
锁提供了对共享资源的独占访问,每次只能有一个线程对lock对象加锁,线程开始访问共享资源之前应先获取lock对象
ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,比较常用的是ReentrantrantLock,可以显式加锁,释放锁

synchronized与lock的对比
lock是显示锁(手动开启和关闭锁)synchronized是隐式锁,出了作用域自动释放
lock只有代码块锁,synchronized有代码块锁和方法锁
使用lock锁,jvm将花费较少的时间来调度线程,性能更好,并具有更好的扩展性(提供更多的子类)
使用优先顺序:
lock>同步代码块(已经进入了方法体,分配了相应资源)>同步方法(在方法体之外)

 


package JavaSE.Thread.Lock;
/**
* 语法:
*/

import java.util.concurrent.locks.ReentrantLock;

public class lock {
private final ReentrantLock lock = new ReentrantLock();
public void m(){
lock.lock();
try {
//线程不安全的代码
}finally {
lock.unlock();
//如果同步代码有异常,要将unlock()写入finally语句块
}
}
}

标签:同步,synchronized,lock,代码,ReentrantLock,线程
From: https://www.cnblogs.com/ly123dcom/p/17858582.html

相关文章

  • BlockingQueue阻塞队列
    BlockingQueue阻塞队列BlockingQueue简介juc包下,BlockingQueue很好的解决了多线程中,高效安全的"传输数据"问题。阻塞队列,是一个队列,可以是数据从队列的一端输入,从另一端输出。当队列空时,从队列获取元素线程被阻塞,直到其他线程向空的队列插入新元素。当队列满时,向队列添加元......
  • ReentrantReadWriteLock读写锁
    ReentrantReadWriteLock读写锁乐观锁和悲观锁乐观锁乐观锁,就是给需要共享的数据,添加一个版本号version,例如1,每次有线程更新共享数据后,version+1,每次线程进行数据更新时,要比较当前线程持有的数据的版本号,相等则修改,不相等则不修改,支持并发访问。悲观锁悲观锁,就是每次只能有一......
  • Python文件锁portalocker模块
    在多进程/多线程的学习后,终于来到了“文件锁”这个概念阶段,文件锁的存在就是由于在多进程/线程操作时会对某个文件进行频繁修改,而导致读取与修改的数据产生不同步。典型场景有以下:进程1对文件A进行写入操作,写入一条记录a,持续时间时20s才能完成这个文件的写入。此时进程2在第......
  • General error: 1205 Lock wait timeout exceeded; try restarting transaction【事务
    转载:https://blog.51cto.com/u_12390904/6254246       ......
  • makeblock
    importrandomimportpygamePANEL_width=1080PANEL_highly=720FONT_PX=15makeblock=pygame.image.load('logo.png')pygame.init()#创建一个可视窗口#CreateavisualwindowwinSur=pygame.display.set_mode((PANEL_width,PANEL_highly))font=......
  • ES插入报错 索引只读:blocked by: [FORBIDDEN/12/index read-only / allow delete (ap
     ES插入报错:reason:ElasticsearchException[Elasticsearchexception[type=cluster_block_exception,reason=blockedby:[FORBIDDEN/12/indexread-only/allowdelete(api)];]]   这种大多都是因为磁盘空间不足了超过设置的阈值,一般80%所以索引变成只读了,要把空......
  • Qt blockSignals
    有时我们需要,控件不接收信号,可以使用blockSignals 当设置为true时,QObject对象[子类]不会发出信号1、函数原型1boolQObject::blockSignals(boolblock)2Ifblockistrue,signalsemittedbythisobjectareblocked(i.e.,emittingasignalwillnotinvokeanythin......
  • CAD中查看图元属性、绘制region、绘制block、绘制xc
    一、选中图元,编辑,查看属性 二、面域命令:region选定一个封闭图形,回车 三、块的新建及编辑命令:block选定一个封闭图形,命名,确定 四、XC前提:对块进行操作命令:xclip......
  • 无涯教程-Ruby - Blocks块
    您已经了解了Ruby是如何定义方法的,可以在其中放置大量语句,然后调用该方法。同样,Ruby也具有Block的概念。Block语法block_name{statement1statement2..........}在这里,您将学习使用简单的yield语句来调用块。您还将学习使用带参数的yield语句来调用块。Yie......
  • 记一次有趣的hwclock写RTC的PermissionDenied错误
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。环境说明  无前言  稍微接触过嵌入式板卡的,基本都知道嵌入式板卡里面有个功能叫做RTC。在Linux里面,有几个概念比较重要,它们分别是系统时间和硬件时钟。对于系......