zoukankan      html  css  js  c++  java
  • 线程死锁

    示例:

    public class DeadLock {
    	public static void main(String[] args) {
    		A a = new A();
    		B b = new B();
    		
    		new Thread(new Runnable() {
    			@Override
    			public void run() {
    				synchronized (b) {
    					try {
    						Thread.sleep(3000);
    					} catch (InterruptedException e) {
    						e.printStackTrace();
    					}
    					synchronized (a) {
    						System.out.println("b lock before a");
    					}
    				}
    			}
    		}).start();
    		new Thread(new Runnable() {
    			@Override
    			public void run() {
    				synchronized (a) {
    					try {
    						Thread.sleep(3000);
    					} catch (InterruptedException e) {
    						e.printStackTrace();
    					}
    				
    					synchronized (b) {
    					}
    				}
    			}
    		}).start();
    	}
    	
    	static class A{
    	}
    	
    	static class B{	
    	}
    
    }
    

    运行后通过java visualvm 看到检测到死锁:

    Found one Java-level deadlock:
    =============================
    "Thread-1":
      waiting to lock monitor 0x0000000002a4e728 (object 0x00000007809cb220, a com.thread.threadlocal.DeadLock$B),
      which is held by "Thread-0"
    "Thread-0":
      waiting to lock monitor 0x0000000002a4d288 (object 0x00000007809c9eb0, a com.thread.threadlocal.DeadLock$A),
      which is held by "Thread-1"
    
    Java stack information for the threads listed above:
    ===================================================
    "Thread-1":
            at com.thread.threadlocal.DeadLock$2.run(DeadLock.java:36)
            - waiting to lock <0x00000007809cb220> (a com.thread.threadlocal.DeadLock$B)
            - locked <0x00000007809c9eb0> (a com.thread.threadlocal.DeadLock$A)
            at java.lang.Thread.run(Thread.java:748)
    "Thread-0":
            at com.thread.threadlocal.DeadLock$1.run(DeadLock.java:20)
            - waiting to lock <0x00000007809c9eb0> (a com.thread.threadlocal.DeadLock$A)
            - locked <0x00000007809cb220> (a com.thread.threadlocal.DeadLock$B)
            at java.lang.Thread.run(Thread.java:748)
    
    Found 1 deadlock.
    
    

    线程死锁出现的四个条件:
    上面示例就是其中一种互相等待对方释放锁的情况,下述博文详细介绍了死锁产生的原因以及避免死锁发生:
    https://blog.csdn.net/jyy305/article/details/70077042
    https://blog.csdn.net/ls5718/article/details/51896159

  • 相关阅读:
    CF343D Water Tree
    CF340B Maximal Area Quadrilateral
    测试环境/生产环境,接口地址配置
    json-server MOCK方案
    vscode prettier保存代码时自动格式化
    蓝鲸6.0前置准备
    nginx日志提取案列
    蓝鲸模拟考试
    部署维护
    第一次模拟考
  • 原文地址:https://www.cnblogs.com/Kevin-1992/p/12608365.html
Copyright © 2011-2022 走看看