1
24
你可以使用
java.util.concurrent.Lock
而不是内在的
|
2
10
您可以使用调试工具或探查器,而不是为调试添加额外的代码。 一种选择是使用类似JConsole的东西(附带JDK),其中包括一个名为“检测死锁”的按钮(至少它在Java 6中执行,我认为它在Java 5中不起作用)。另一个选项是生成一个到控制台的线程转储-在Unix上,您可以键入kill-3,而在Windowsctrl+brk上则可以。其他的分析工具,如VisualVM(也在JDK中)可以提供帮助。终于有了 JCarder 它是“在并发多线程Java程序中寻找潜在死锁的开源工具”。 |
3
2
可以让线程共享显式锁(参见Java.UTI.Orth.Copy.Cub)。然后您可以使用lock.trylock(),它可以接受可选的超时。 您还可以使用Java 1.6中的JStand实用程序(不确定约1.5),它将打印出所有线程的状态以及它们可能或可能不会等待的内容。只需使用进程ID调用它即可。例如:
|
4
1
传统的同步方法不能使用超时。但是,使用“new”java.util.concurrent工具,可以使用支持超时的编程锁。 例如,看看 java.util.concurrent.locks.ReentrantLock
|
5
1
可能有两个原因: 1)线死 2)线程被锁定在某个地方或执行了您没有预料到的操作。 最好的解决方案是始终使用调试器(等到出现这种情况,然后将应用程序打包)或使用jconsole/jstack/jvisualvm。 |
6
0
虽然在等待同步方法的锁时可能会出现超时,但是实现这些方法是不方便的。基本上,您将生成一个计时器线程,它将在T秒后中断块线程……不好。 如果您使用的是Java 5或更高版本,我强烈建议您查看新的并发类提供的内容。例如,您可以考虑使用 ReentrantLock ,它有一个方法 tryLock(long timeout, TimeUnit unit) 这将允许您尝试获取锁,但允许您在固定时间后逃脱。 |
7
0
可以使用Java管理扩展(JMX)API来确定Java中的死锁。退房 http://ourownjava.com/how-to-identify-deadlock-in-java 举个例子。 |
Administrator · c#-等待完成2个线程中的1个 7 年前 |
Magnar Myrtveit · 发送电子邮件的脚本中出现死锁 7 年前 |
BlackBrain · MySQL死锁,带有引发触发器的插入 8 年前 |
Patt · ExecutorService和ForkJoinPool 8 年前 |