synchorized和ReetrantLock锁住的分别是什么

问题描述

synchorized和ReetrantLock锁住的分别是什么 10C
synchorized 是锁住了对象,对于同一个类内的其它带synchorized的方法都是一样的。
只要有一个线程执行synchorized方法,其它带synchorized方法的线程就会被阻塞?
而ReetrantLock锁住的是线程,非此线程一旦运行到带锁部分就会被挂起,对于其它的线程调用其它的lock块是不会影响的?

解决方案

ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候
线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,
如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断
如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情

ReentrantLock获取锁定与三种方式:a)  lock() 如果获取了锁立即返回,如果别的线程持有锁,当前线程则一直处于休眠状态,直到获取锁b) tryLock() 如果获取了锁立即返回true,如果别的线程正持有锁,立即返回false;c)tryLock(long timeoutTimeUnit unit),   如果获取了锁定立即返回true,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就返回true,如果等待超时,返回false;d) lockInterruptibly:如果获取了锁定立即返回,如果没有获取锁定,当前线程处于休眠状态,直到或者锁定,或者当前线程被别的线程中断
时间: 2025-01-26 13:27:32

synchorized和ReetrantLock锁住的分别是什么的相关文章

USB伪造网卡 从锁住的笔记本上窃取信息

发现者说:"这本来不应该奏效". 安全顾问.博主Rob Fuller刚刚将一个基于SoC的USB设备改造成了信息窃取器,该方法甚至对锁住的设备都有效. Fuller的攻击通过更改dongle来实现.当设备被插入时,该部分会安装并伪装成受害者的网关.DNS和WPAD(网络代理自动发现协议)服务器.受害设备会认为攻击方是以太网适配器,因而会将信息发送到伪造的网络上. 必须配置以太网适配器,抓取目标设备在此过程中提供的信息. 一方面,它抓取的信息拥有受害设备所存储的哈希,另外一方面,这些信息

如何应对锁住的数据记录:NOLOCK和READPAST

对于非银行等严格要求事务的行业,搜索记录中出现或者不出现某条记录,都是在可容忍范围内,所以碰到死锁,应该首先考虑,我们业务逻辑是否能容忍出现或者不出现某些记录,而不是寻求对双方都加锁条件下如何解锁的问题. NOLOCK 和 READPAST 都是处理查询.插入.删除等操作时候,如何应对锁住的数据记录.但是这时候一定要注意NOLOCK 和 READPAST的局限性,确认你的业务逻辑可以容忍这些记录的出现或者不出现: 简单来说: NOLOCK 可能把没有提交事务的数据也显示出来. READPAST

怎样锁住电脑桌面

我们总是喜欢我自己设置一个好看的桌面背景,根据个人喜好不同,有的时候会被别 人改动.如何锁住这些桌面背景不让别人随意改动呢.下面我给大家简单解释一下如 何锁住桌面背景. 首先打开"开始→运行",输入"regedit"打开注册表编辑器,找到分支 "HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion Policies", 新建一个ActiveDeskop项,再在右侧窗口中新建一个名为Noch

IE的下载文件对话框弹出之前锁住画面,弹出之后,画面解锁。大神快来解答~~

问题描述 该程序使用的是什么WEBUI的框架,很奇怪的东西,试了很多方法都出错..状况描述:画面上有一个按钮,点击会弹出IE的那个下载文件对话框.但是弹出下载文件对话框之前如果数据量较大的话,会有很长一段时间的等待.在这段等待的时间里客户有可能会再次点击下载的那个按钮.为了避免这个情况,点击下载之后页面锁住,也就是一个东西把下面都盖住,然后又一个"loading..."的字样.当前情况:点击按钮后,画面被loading...字样的div盖住,永不解锁...问题:如何知道在什么时候IE的

sqlserver:查询锁住sql以及解锁方法

查看被锁表语句 --查看被锁表: SELECT request_session_id spid, OBJECT_NAME( resource_associated_entity_id ) tableName FROM sys.dm_tran_locks WHERE resource_type = 'OBJECT' ORDER BY request_session_id ASC --spid 锁表进程 --tableName 被锁表名 --根据锁表进程查询相应进程互锁的SQL语句 DBCC INP

oracle 记录被另一个用户锁住

  oracle数据中删除数据时提示"记录被另一个用户锁住" 解决方法   1 查看数据库锁,诊断锁的来源及类型   select object_id,session_id,locked_mode from v$locked_object;     或者用以下命令:    select b.owner,b.object_name,l.session_id,l.locked_mode    from v$locked_object l, dba_objects b    where b.

spring oracle 锁表-为什么insert操作会把整张表都锁住呢?

问题描述 为什么insert操作会把整张表都锁住呢? 项目中遇到一个很奇怪的问题: 问题描述:现在需要从项目外部导大量的数据到项目内,这个时候我起了一个spring事务往很多张表中去插入数据,这个时候其他用户访问系统去更新旧的数据的时候发现表被锁了.也就是说我在导入数据的时候,其他用户都不能对系统的表进行相应的更新操作.这是为什么???? 解决方案 查的时候不会锁住,只有曾删改才会 解决方案二: 当ORACLE执行insert等DML语句时,会首先自动在所要操作的表上申请一个TM锁,当TM锁获得

联想否认锁住设备以及阻止用户安装Linux

一些联想新瑜伽设备用户准备起诉联想,理由是联想阻止他们在设备上安装Linux操作系统.他们表示,在联系联想产品专家之后被告知,无法安装Linux是由于微软和联想之间的协议所导致.现在,联想发言人否认锁住设备以及阻止用户安装Linux的指控.联想发言人表示,这个问题是因为全行业正在为固态硬盘提供RAID模式,以提高数据读写性能. 联想不会在客户设备上阻止他们安装其他操作系统,但用户需要依赖于其他操作系统厂商发布相应的驱动程序.这位发言人表示,当相应的驱动程序和内核支持到位之后,用户可以在他们的设备

==站点在运行中,有个表被锁住了,怎么办?==

问题描述 网站在运行中发现有个做更新操作的表被锁住了(其他表没问题,只有那个表的查询页面访问不了)重启tomcat可以恢复,但有没有好的办法,不用重启,仅针对那个表做什么操作可以取消锁住状态的呢??我用的是SqlServer 解决方案 解决方案二:这得找到表被锁住的原因,否则治标不治本.表被锁住在数据库服务器上应该是有方法解锁的,Oracle就有,很少使用SQLServer数据库,数据库专业的问题,建议移到SQLServer版块中去问问吧.PS:移帖方法:标题上方第一个按钮"管理菜单"