线程的死锁
各位大大 我写了一个程序是测试线程的死锁 但是发现打印出的结果和实际有出入 以下是源代码
理论上来说应该直接就进入死锁了 什么也不会打印 但是实际上会有很多打印结果 而且多次执行发现发生死锁的位置都不相同 哪位大大能给解释一下啊
class MyThreadTest
{
public static void main(String[] args){
ThreadTest tt = new ThreadTest();
new Thread(tt).start();
new Thread(tt).start();
//new Thread(tt).start();
//new Thread(tt).start();
}
}
class ThreadTest implements Runnable
{
int i = 100;
Object o = new Object();
public void run(){
while(true){
synchronized(o){
try{
Thread.sleep(10);
}catch(Exception e){
e.printStackTrace();
}
synchronized(this){
if(i>0){
System.out.println("同步块~~"+Thread.currentThread().getName()+" "+i);
i--;
}
}
}
test();
}
}
public synchronized void test(){
synchronized(o){
if(i>0){
try{
Thread.sleep(10);
System.out.println("同步方法~~"+Thread.currentThread().getName()+" "+i);
i--;
}catch(Exception e){
e.printStackTrace();
}
}
}
}
}理论上来说应该直接就进入死锁了 什么也不会打印 但是实际上会有很多打印结果 而且多次执行发现发生死锁的位置都不相同 哪位大大能给解释一下啊
...全文
相关推荐
线程死锁的例子
死锁检测与恢复:通过算法检测出死锁状态,并采取措施(如回滚、撤销线程或强制唤醒一个线程)来打破死锁。了解线程死锁及其解决方案是每一位IT专业人员必备的知识。
多线程死锁的产生以及如何避免死锁方法(详解)
【多线程死锁的产生以及如何避免死锁方法详解】多线程死锁是并发编程中一个重要的问题,它发生在多个线程之间,当它们因竞争资源而陷入一种互相等待的状态,没有外部干预,都无法继续执行。
Java多线程之死锁的出现和解决方法
使用线程池:使用线程池可以避免死锁的出现,因为线程池可以控制线程的执行顺序。死锁是多线程编程中一个常见的问题,解决死锁需要我们了解死锁的出现原因和解决方法。
java线程死锁代码示例
java线程死锁代码示例本文主要介绍了java线程死锁代码示例,分享了一个简单线程死锁的例子,需要的朋友可以参考下。以下是对该示例的详细解释和知识点总结:1.
多线程死锁
在多线程编程中,死锁是一个常见的问题,特别是在C#这样的高级编程语言中。死锁发生时,两个或更多的线程互相等待对方释放资源,导致它们都无法继续执行。了解死锁并掌握解决策略是每个专业开发者的必备技能。


