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

      

      首先看百度百科上的死锁的概念

      死锁:死锁是指两个或者两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象,若无外力,他们都将无法推进下去。

    此时成系统处于死锁状态,或者系统产生了死锁,这些永远在互相等待的进程成为死锁进程。

      Java中的线程可以理解为一个小的独立的进程。

        介绍完概念,下面我们来实现一个死锁。

       

    public class Run {
    
    	public static void main(String[] args) {
    		
    		String lock1="a";
    		String lock2="b";
    		
    		new Thread(new Runnable() {
    			
    			@Override
    			public void run() {
    				
    				try {
    					synchronized (lock1) {
    						System.out.println("A  into lock1");
    						Thread.sleep(2000);
    						synchronized (lock2) {
    							System.out.println("A  into lock2");
    						}
    					}
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    				
    			}
    		},"A").start();
    		
    		new Thread(new Runnable() {
    			
    			@Override
    			public void run() {
    				
    				try {
    					synchronized (lock2) {
    						System.out.println("B into lock2");
    						Thread.sleep(2000);
    						synchronized (lock1) {
    							System.out.println("B into lock1");
    						}
    					}
    				} catch (Exception e) {
    					// TODO: handle exception
    				}
    				
    			}
    		},"B").start();
    
    	}
    
    }
    

      控制台:

      可以发现按钮是红色的,两个线程都未结束。此时我们可以使用jdk自带的工具来检测是否有死锁的现象。

      首先进入cmd工具,在进入jdk的安装文件夹中的bin目录,执行jps命令,

    得到运行的线程id是9548,在执行jstack命令 C:Program FilesJavajdk1.8.0_91in>jstack -l 9548,此处注意,是英文字母中L,而不是1

     检测有死锁现象。

      死锁是程序设计的Bug,在设计程序时要避免双方互相持有对方的锁的情况。本实验采用synchronized嵌套的代码接口来实现死锁,其实

    不适用嵌套的synchronized代码结构也会出现死锁,与嵌套没有任何关系,不要被代码的结构所误导,知道互相等待对象释放锁就有可能出现死锁。

      每一个优秀的人,都有一段沉默的时光。不抱怨,不诉苦,最后度过那段感动自己的日子。

  • 相关阅读:
    html5 sessionStorage util
    配置php redis 扩展
    css颜色字符串转换, 字符串转化为驼峰形式
    根据包名,在指定空间中创建对象
    列表习题
    正则题--什么时候才能到200+
    每日练习0424---函数和列表 元祖 字典的习题 sort和sorted总结
    习题之----列表和字典
    求字母的个数 求单词的个数
    字符串练习题(2)
  • 原文地址:https://www.cnblogs.com/hrlizhi/p/9417737.html
Copyright © 2011-2022 走看看