线程的死锁

讨厌走开啦 讨厌走开啦 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
各位大大 我写了一个程序是测试线程的死锁 但是发现打印出的结果和实际有出入 以下是源代码
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();
}
}
}
}
}


理论上来说应该直接就进入死锁了 什么也不会打印 但是实际上会有很多打印结果 而且多次执行发现发生死锁的位置都不相同 哪位大大能给解释一下啊
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
讨厌走开啦
讨厌走开啦 领域专家: 前端开发技术领域 领域专家: 前端开发技术领域
Java EE 67,535 成员 225,843 内容