死锁:
两个或两个以上的线程在争夺资源的过程中,发生的一种相互等待的现象
例如:
中国人,外国人吃饭
正常:
中国人:筷子两支
外国人:刀和叉
死锁:
中国人:筷子一支,刀一把
外国人:筷子一支,叉一把
两个人出现死锁以后,都不能正常用餐,都等着对方
- package com.kxg_12;
- public class DieLock extends Thread {
- // 创建两个锁对象
- public static Object objA = new Object();
- public static Object objB = new Object();
- // 定义变量
- private boolean flag;
- // 定义构造方法
- public DieLock(boolean flag) {
- this.flag = flag;
- }
- @Override
- public void run() {
- if (flag) {
- // 线程A中嵌套线程B
- synchronized (objA) {
- System.out.println("if ObjA");
- synchronized (objB) {
- System.out.println("if objB");
- }
- }
- } else {
- // 线程B中嵌套线程A
- synchronized (objB) {
- System.out.println("else objB");
- synchronized (objA) {
- System.out.println("else objA");
- }
- }
- }
- }
- }
复制代码- package com.kxg_12;
- public class DieLockDemo {
- public static void main(String[] args) {
- // 创建两个线程
- DieLock dl1 = new DieLock(true);
- DieLock dl2 = new DieLock(false);
- // 启动线程
- dl1.start();
- dl2.start();
- }
- }
复制代码
|
|