两个线程:
线程1
锁o1,
执行块中
try睡1s试图锁o2
线程2
锁o2,
执行块中锁o1,
object式:
public class Test {
static Object o1 = new Object();
static Object o2 = new Object();
public static void main(String[] args) {
new Thread(new Runnable() {
public void run() {
synchronized (o1) {
System.out.println("线程1锁o1");
try {
Thread.sleep(1000);//让当前线程睡眠,保证让另一线程得到o2,防止这个线程启动一下连续获得o1和o2两个对象的锁。
synchronized (o2) {
System.out.println("线程1锁o2");
}
} catch (InterruptedException e) {
e.printStackTrace();
本文展示了如何在Java中编写一段经典的死锁代码,通过两个线程分别尝试获取两个对象锁o1和o2,从而形成相互等待导致死锁的状态。线程1持有o1锁并尝试获取o2,线程2持有o2锁并尝试获取o1,这种顺序不一致造成了死锁问题。
订阅专栏 解锁全文
401

被折叠的 条评论
为什么被折叠?



