package com.itmayiedu;
class DemoThread implements Runnable {
private int count = 1000;
private Object obj = new Object();
public boolean flag = true;
@Override
public void run() {
// 锁(同步代码块)在什么时候释放? 代码执行完, 自动释放锁.
// 如果flag为true 先拿到 obj锁,在拿到this 锁、 才能执行。
// 如果flag为false先拿到this,在拿到obj锁,才能执行。
// 死锁解决办法:不要在同步中嵌套同步。
if (flag) {
while (true) {
synchronized (obj) {
show();
}
}
} else {
while (true) {
show();
}
}
}
public synchronized void show() {
synchronized (obj) {
if (count > 0) {
try {
Thread.sleep(40);
} catch (Exception e) {
}
System.out.println(Thread.currentThread().getName() + "--show--" + count--);
}
}
}
}
public class Test {
public static void main(String[] args) throws InterruptedException {
DemoThread demoThread = new DemoThread();
Thread thread1 = new Thread(demoThread);
Thread thread2 = new Thread(demoThread);
thread1.start();
Thread.sleep(40);
demoThread.flag = false;
thread2.start();
}
}
Java多线程死锁情况模拟
最新推荐文章于 2024-05-21 18:40:32 发布