相关文章
更多最近更新
更多ReentrantLock有什么用处?
2019-03-25 13:33|来源: 网路
如题所述,发现调用 ReentrantLock.lock()方法时候并不能造成死锁。
问题补充:
按照官方的解释,如果线程A调用了lock方法,线程B调用lock方法时候应该是被禁用的,实际上线程B并没有在调用lock方法时候死锁!
以下是测试代码
问题补充:
Rainbow702 写道
官方:
一个可重入的互斥锁定 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁定相同的一些基本行为和语义,但功能更强大。ReentrantLock 将由最近成功获得锁定,并且还没有释放该锁定的线程所拥有。当锁定没有被另一个线程所拥有时,调用 lock 的线程将成功获取该锁定并返回。如果当前线程已经拥有该锁定,此方法将立即返回。可以使用 isHeldByCurrentThread() 和 getHoldCount() 方法来检查此情况是否发生。
它提供了lock()方法:
如果该锁定没有被另一个线程保持,则获取该锁定并立即返回,将锁定的保持计数设置为 1。
如果当前线程已经保持该锁定,则将保持计数加 1,并且该方法立即返回。
如果该锁定被另一个线程保持,则出于线程调度的目的,禁用当前线程,并且在获得锁定之前,该线程将一直处于休眠状态,此时锁定保持计数被设置为 1。
一个可重入的互斥锁定 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁定相同的一些基本行为和语义,但功能更强大。ReentrantLock 将由最近成功获得锁定,并且还没有释放该锁定的线程所拥有。当锁定没有被另一个线程所拥有时,调用 lock 的线程将成功获取该锁定并返回。如果当前线程已经拥有该锁定,此方法将立即返回。可以使用 isHeldByCurrentThread() 和 getHoldCount() 方法来检查此情况是否发生。
它提供了lock()方法:
如果该锁定没有被另一个线程保持,则获取该锁定并立即返回,将锁定的保持计数设置为 1。
如果当前线程已经保持该锁定,则将保持计数加 1,并且该方法立即返回。
如果该锁定被另一个线程保持,则出于线程调度的目的,禁用当前线程,并且在获得锁定之前,该线程将一直处于休眠状态,此时锁定保持计数被设置为 1。
按照官方的解释,如果线程A调用了lock方法,线程B调用lock方法时候应该是被禁用的,实际上线程B并没有在调用lock方法时候死锁!
以下是测试代码
package net.kaixindog.test; import java.util.concurrent.locks.ReentrantLock; public class T extends Thread{ public final ReentrantLock lock=new ReentrantLock(); private int threadId; public T(int threadId){ this.threadId=threadId; } public void run(){ try{ lock.lock(); System.out.println("Thread ["+threadId+"]lock!"); System.out.println("Thread ["+threadId+"]unlock!"); System.out.println("Thread ["+threadId+"]"+lock.isHeldByCurrentThread()); }finally{ lock.unlock(); } } /* public void run(){ synchronized(lock){ System.out.println("Thread ["+threadId+"]lock!"); System.out.println("Thread ["+threadId+"]unlock!"); } }*/ }
package net.kaixindog.test; /** * net.kaixindog.test * @author lixm * @date 2011-8-19 * description: */ public class ReentrantLockTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub T t1=new T(1); T t2=new T(2); T t3=new T(3); t1.start(); t2.start(); t3.start(); } }
相关问答
更多-
学习电脑组装与维护有什么用处[2023-08-28]
可以组装和维护计算机。 -
证书到底有什么用处吗?[2022-11-03]
那要看你对证书的理解,证书并不是越多越好,也不是因为你比别人多了一个证书,用人单位就会聘用你,而且也要看年一的工作能力,证书充其量只不过是一个参考而已。 例如,目前我国对IT人才的需求仍然很大,许多非计算机专业的人都是半路出家进入IT业。在没有专业文凭的情况下,IT认证证书就成了重要的能力证明,这导致IT认证持续升温。在个人的职业生涯中,IT证书将发挥举足轻重的作用。但是,大家也不要将IT证书看得过重,不要简单地为了证书而培训,而应该时刻对IT证书保持一种清醒的认识,这样才能有助于自己涉足IT行业。笔者认为 ... -
python metavar什么用处[2021-05-04]
一般来说,Python中有两个内建的模块用于处理命令行参数: 一个是 getopt,《Deep in python》一书中也有提到,只能简单处理 命令行参数; 另一个是 optparse,它功能强大,而且易于使用,可以方便地生成标准的、符合Unix/Posix 规范的命令行说明。 示例如下: ? from optparse import OptionParser parser = OptionParser() parser.add_option("-p", "--pdbk", action="store_t ... -
MYSQL数据库的作用是什么[2024-01-02]
安装了MYSQL软件可以去数据库文件进行简单明了的操纵,MYSQL用于开发小型系统效率极高,经常与PHP合用,来开发网站,大学时我同学好几个就是用这套系统作的网站。 同样,MYSQL便于开发,但安全性也差,所以建议开发大型系统时不要使用,而且像这类数据库软件最好在服务器上跑,这样系统工作效率高,而且安全... -
oracle具体什么用处[2024-02-14]
存储数据,实在想要知道为什么用oracle的话,可以找oracle的客服问一下,然后他(她)就会告诉你这个东西有什么用,用了对你有什么好处,当然其中是有些水分的。 -
学习linux有什么用处[2022-01-01]
学习Linux的心得 通过这几年来对Linux的学习,一步一步摸着石头过河,到现在才刚刚上岸。我能起的作用可能可以告诉你一些学习的方法,当你遇到困难的时候有个人在旁边给予帮助。说句心里话,对于Linux的掌握我还只能算是很粗的东西,因为看了很多大师们的东西以后,发现自已离他们真得还很远。我不是要打击你的意思,是告诉你实情。但也可以告诉你,就这一点现在还是比较好混口饭吃。对她了解掌握的越深,你会发现他几乎什么都能做,有了实现自已商业机会的平台。 学习Linux分好几种层次,我个人觉得可以用中学里学的课文《 ... -
nView Desktop Manager有什么用处?[2023-10-13]
一般是你安装了显卡驱动后产生的, 根据你显卡的不同,部分可以对桌面、颜色、大小、 字体甚至多屏幕模式进行细致的调整。 -
MYSQL数据库的作用是什么[2023-01-14]
MYSQL,是数据库的一种,轻量级,免费,开放源代码的数据库存储系统. 采纳哦 -
MYSQL数据库的作用是什么[2022-03-12]
安装了MYSQL软件可以去数据库文件进行简单明了的操纵,MYSQL用于开发小型系统效率极高,经常与PHP合用,来开发网站,大学时我同学好几个就是用这套系统作的网站。 同样,MYSQL便于开发,但安全性也差,所以建议开发大型系统时不要使用,而且像这类数据库软件最好在服务器上跑,这样系统工作效率高,而且安全... -
阅读关于android:persistent的官方指南 应用程序是否应始终保持运行 - 如果应该,则为“true”,否则为“false”。 默认值为“false”。 应用程序通常不应设置此标志; 持久性模式仅适用于某些系统应用程序。 Read official guide line about android:persistent Whether or not the application should remain running at all times — "true" if it should, ...