1、示例代码
package com.memory;
/**
* @author dc
* @date 2020/6/28 - 14:46
*/
public class MyTest3 {
/**
* 该主线程(main方法)的执行流程:
* 首先创建了两个线程,名字分别为 "Thread-A"、"Thread-B"
* 这两个线程分别执行,当执行A线程的时候,A线程中的方法并没有马上执行完,而是睡眠了5秒,再去访问
* B线程中的资源,而此时,B线程中的方法同样也没有马上执行完,也是睡眠了5秒之后再去访问A线程中的资源
* 由于这两个资源都加了一把锁,所以此时,A线程等待B线程释放资源,B线程等待A线程释放资源,从而形成
* 了死锁。
*
*/
public static void main(String[] args) {
//为A类创建线程
new Thread(()->A.method(), "Thread-A").start();
//为B类创建线程
new Thread(()->B.method(), "Thread-B").start();
}
}
//对静态资源加锁就相当于对该类加锁
class A {
public static synchronized void method() {
//打印该方法被访问的标记
System.out.println("执行了A类中的method方法!");
//线程睡眠5秒后,再往下执行
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//执行B类中的方法
B.method();
}
}
class B {
public static synchronized void method() {
//打印该方法被访问的标记
System.out.println("执行了B类中的method方法!");
//线程睡眠5秒后,再往下执行
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//执行A类中的方法
A.method();
}
}
2、运行结果