栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何检查线程是否在同步块或方法内部?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何检查线程是否在同步块或方法内部?

输入同步方法时,VM会在当前对象上设置锁定。因此,以下代码具有相同的效果:

synchronized void syncMethod() {    // do something}void syncManually() {    synchronized (this) {        // do something    }}

这意味着同步方法与

synchronized( lock ) {    // do something}

您代码中的任何地方。

您可以

Thread.holdsLock(...)
用来检查线程是否持有特定的锁。这是示例代码:

final Object lock = new Object();public void lockDemo() {    System.out.println( Thread.holdsLock(lock) );     // false    System.out.println( Thread.holdsLock(this) );     // false    synchronized ( lock ) {       System.out.println( Thread.holdsLock(lock) );   // true: locked by object      System.out.println( Thread.holdsLock(this) );   // false    }    doSyncMethod();}public synchronized void doSyncMethod() {    System.out.println( Thread.holdsLock(lock) );  // false    System.out.println( Thread.holdsLock(this) );  // true: locked by synchronized method}

从Java
1.5开始,该软件包支持诸如ReentrantReadWriteLock之类的更复杂的锁

java.util.concurrent.locks
。它们可以提供单独的读写锁定,并提高应用程序的性能。Oracle
Java教程的“
锁定对象”一章是一个好的开始。




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/419439.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号