zoukankan      html  css  js  c++  java
  • 模拟死锁

    package com.roocon.thread.t6;
    
    public class Demo3 {
        private Object obj1 = new Object();
        private Object obj2 = new Object();
    
        public void a(){
            synchronized (obj1){
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (obj2){
                    System.out.println("a");
                }
            }
        }
    
        public void b(){
            synchronized (obj2){
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (obj1){
                    System.out.println("b");
                }
            }
        }
    
        public static void main(String[] args) {
            Demo3 demo3 = new Demo3();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    demo3.a();
                }
            }).start();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    demo3.b();
                }
            }).start();
        }
    
    }

    运行结果:

    控制台一直在运行,但是无任何输出。

    通过命令检测是否真的发生了死锁:

    点击线程,检测死锁:

  • 相关阅读:
    Java 注解
    java多线程
    webstorm配置Monokai-Sublime.jar主题
    express
    npm与package.json
    Node require方法加载规则
    js伪数组转数组
    node中的Console
    Node.js核心模块-url
    服务端渲染SSR和客户端渲染CSR
  • 原文地址:https://www.cnblogs.com/sunnyDream/p/8135324.html
Copyright © 2011-2022 走看看