永发信息网

java怎么编程写一个能导致死锁的程序

答案:2  悬赏:80  手机版
解决时间 2021-01-03 12:26
  • 提问者网友:暮烟疏雨之际
  • 2021-01-02 17:46
java怎么编程写一个能导致死锁的程序
最佳答案
  • 五星知识达人网友:逐風
  • 2021-01-02 18:52
额,这么简单,就直接定义一个类,该类随便定义实例化个Object对象,然后在类中再定义2个内部线程类,线程一,对object使用synchronized,在synchronized块中用个while(true)的死循环就好了,线程二,对object也是使用synchronized同步,至于synchronized块中干啥,你自己看着办,反正线程一死循环不会释放object对象锁,线程二是执行不到里面的代码块的
全部回答
  • 1楼网友:雪起风沙痕
  • 2021-01-02 19:40
在编程中使用threadmxbean类来检测死锁   java 5引入了threadmxbean接口,它提供了多种监视线程的方法。我建议您了解所有这些方法,因为当您没使用外部工具时,它们会为您提供很多有用的操作以便您监测程序性能。这里,我们感兴趣的方法是findmonitordeadlockedthreads,如过您使用的是java 6,对应的方法是finddeadlockedthreads。二者的区别的是,finddeadlockedthreads还可以检测到owner locks(java.util.concurrent)引起的死锁,而findmonitordeadlockedthreads只能检测monitor locks(例如,同步块)。由于保留老版本的方法只是出于兼容性的考虑,所以我将使用新版本的方法。在这里,编程的思想是把对死锁的周期性检测封装到一个可重用组件里,之后我们只需启动它、随它去。   一种实现调度的方法是通过执行器框架,即一组良好抽象并易于使用的多线程类。   scheduledexecutorservice scheduler = executors.newscheduledthreadpool(1);   this.scheduler.scheduleatfixedrate(deadlockcheck, period, period, unit);   就是那么简单,在我们通过选择周期和时间单位而设置了一个特定时间后,就得到了一个周期性调用的线程。接着,我们想使功用得以拓展从而允许用户提供在程序检测到死锁时所触发的行为。最后,我们需要一个方法来接收用于描述死锁中所有线程的一系列对象。   void handledeadlock(final threadinfo[] deadlockedthreads);
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯