代码模拟Java中产生死锁

Bertha 。 2022-05-25 00:19 233阅读 0赞

描述

启动两个线程,设置两个线程监听对象obj1 、obj2。

  • 线程1启动的时候,先获取obj1锁,暂停1秒,然后获取obj2锁。
  • 线程2启动时,先获取obj2,再获取obj1

当线程2启动的时候获取obj2成功,然后去获取obj1的时候,obj1被线程1占用了,此时就等待。线程1秒后去获取obj2,此时obj2锁被线程2握着,产生死锁,互相无法获取。

代码

  1. /**
  2. * @author yuyufeng
  3. * @date 2018/4/24.
  4. */
  5. public class App {
  6. private static Object obj1 = new Object();
  7. private static Object obj2 = new Object();
  8. public static void main(String[] args) {
  9. new Thread(){
  10. @Override
  11. public void run() {
  12. synchronized (obj1){
  13. try {
  14. System.out.println("Thread1 obj1");
  15. Thread.sleep(1000);
  16. } catch (InterruptedException e) {
  17. e.printStackTrace();
  18. }
  19. synchronized (obj2){
  20. System.out.println("Thread1 obj2");
  21. }
  22. }
  23. }
  24. }.start();
  25. new Thread(){
  26. @Override
  27. public void run() {
  28. synchronized (obj2){
  29. System.out.println("Thread2 obj2");
  30. synchronized (obj1){
  31. System.out.println("Thread2 obj1");
  32. }
  33. }
  34. }
  35. }.start();
  36. }
  37. }

运行结果

发表评论

表情:
评论列表 (有 0 条评论,233人围观)

还没有评论,来说两句吧...

相关阅读

    相关 _Java产生的简单案例

    一、简介 多个线程各自占有一些共享资源,并且互相等待其它线程占有的资源才能进行,而导致的两个或多个线程都在等待对方释放资源,都停止执行的情景。某一个同步块同时拥有“两个以

    相关 产生的条件

    产生死锁的条件 (1) 互斥条件 资源是独占的且排他使用。即任意时刻一个资源只能给一个进程使用,其他申请者只有等待,直到资源被占有者释放。如例子中的A,B资源。

    相关 产生的必要条件

    产生死锁的原因主要是: (1) 因为系统资源不足。 (2) 进程运行推进的顺序不合适。 (3) 资源分配不当等。     如果系统资源充足,进程的资源请求都能够得到

    相关 模拟

    死锁:是指有两个或者多个线程互相持有对方需要的资源,导致涉及到的所有线程都处于阻塞状态,无法继续运行。 import java.util.ArrayList; impor