java多线程死锁简单实例

TestDeadLock.java:
package com.ctgu.testDeadLock;

public class TestDeadLock {

public static void main(String[] args) {
    User user = new User("大毛", "123", 22);
    User user2 = new User("二毛", "456", 44);
    new Thread1("Thread1", user, user2).start();
    new Thread2("Thread2", user, user2).start();
}

}

Thread1.java:
package com.ctgu.testDeadLock;

public class Thread1 extends Thread{

private User user;
private User user2;

public Thread1(String name, User user, User user2) {
    this.setName(name);
    this.user = user;
    this.user2 = user2;
}

@Override
public void run() {
    synchronized (user) {
        System.out.println(Thread.currentThread().getName() + " 锁定user");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        synchronized (user2) {
            System.out.println(Thread.currentThread().getName() + " 锁定user2");
        }
    }
}

}

Thread2.java:
package com.ctgu.testDeadLock;

public class Thread2 extends Thread{

private User user;
private User user2;

public Thread2(String name, User user, User user2) {
    this.setName(name);
    this.user = user;
    this.user2 = user2;
}

@Override
public void run() {
    synchronized (user2) {
        System.out.println(Thread.currentThread().getName() + " 锁定user2");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        synchronized (user) {
            System.out.println(Thread.currentThread().getName() + " 锁定user");
        }
    }
}

}

运行结果:
Thread1 锁定user
Thread2 锁定user2
此时,程序一直执行不停止,死锁现象发生

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 7,192评论 1 15
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 8,083评论 1 18
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,971评论 18 399
  • synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 修饰一个代码块,被修饰的代码...
    明教de教主阅读 3,865评论 0 2
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 11,940评论 0 62