当前位置: 首页 > 面试题库 >

以编程方式确定哪个Java线程持有锁

孙正业
2023-03-14
问题内容

在运行时是否可以以编程方式检查持有给定对象锁的线程的名称?


问题答案:

您只能说出当前线程是否持有普通锁(Thread.holdsLock(Object))。没有本机代码,您将无法获得对具有锁的线程的引用。

但是,如果您要对线程进行任何复杂的处理,则可能需要熟悉java.util.concurrent包。该ReentrantLock确实让你得到它的所有者(但其受保护的方法,所以你必须要扩展这个)。根据您的应用程序的不同,很可能是通过使用并发包,您会发现根本不需要获取锁的所有者。

有一些非编程方法可以找到锁所有者,例如发信号通知JVM向stderr发出线程转储,这对确定死锁的原因很有用。



 类似资料:
  • 问题内容: 有没有一种方法可以在运行时以编程方式告知Google App Engine应用程序在本地运行还是在托管运行?我正在寻找一种在本地开发环境中运行时调用一些自定义存根代码,并在运行托管时进行不同调用的方法。 问题答案: 您可以在AppEngine 1.3中使用。

  • 问题内容: 对于Java对象,有没有办法告诉哪个线程(或null)当前 拥有其监视器?或者至少是一种方法来判断当前线程是否拥有它? 问题答案: 我自己找到了一些答案。要测试当前线程是否拥有 监视器,是否 存在! exists! 这确实非常快(亚微秒),并且从1.4开始就可用。 通常,要测试哪个线程(或线程ID)持有该锁,可以 对 classes (thanks @amicngh). 有一些注意事项

  • 我们可以使用这些jvm标志来确定编译阈值,但是有没有一种方法可以在运行时以编程方式确定它?

  • 问题内容: 我想确定我的Java程序正在以编程方式运行的主机的操作系统(例如:我希望能够基于我在Windows还是Unix平台上加载不同的属性)。做到100%可靠性的最安全方法是什么? 问题答案: 你可以使用: PS:你可能会发现此代码有用: 它所做的只是打印出Java实现提供的所有属性。通过它,你可以了解可以通过属性了解Java环境的内容。

  • 问题内容: 在C语言中,如何以编程方式找出Linux / Ubuntu上是否已在运行某个进程,以避免该进程两次启动?我正在寻找类似于pidof的东西。 问题答案: 您可以进入这些条目并在文件中检查过程,也可以在链接上执行操作(以下使用第一种方法)。

  • 请在这里参考我的问题。这个问题是它的延伸: 如何在有线耳机和免提电话之间检查和重定向音频? 通过包含权限,我能够部分解决我的问题 在我的Android清单中,同样的代码。现在,我可以启用和禁用手机扬声器,但当有线耳机仍与手机物理连接时,我无法以编程方式关闭有线耳机连接。 有人能在这里帮助我吗?我是否可以使用特定的意图来禁用和启用有线耳机连接?