美文网首页
死锁示例

死锁示例

作者: keepSwiming | 来源:发表于2017-06-23 16:35 被阅读11次

死锁示例

由于两个锁对象lock1,lock2是static只存在一份,导致两个线程执行时会相互等待已经被获得的琐对象,导致死锁产生.
如果将static去掉,2个锁对象就是线程独有的变量,不会被别的线程发现,因此不会产生死锁.

public class DeadLock implements Runnable{
    private String tag;
    private static Object lock1 = new Object();
    private static Object lock2 = new Object();
    
    public void setTag(String tag){
        this.tag = tag;
    }
    
    @Override
    public void run() {
        if(tag.equals("a")){
            synchronized (lock1) {
                try {
                    System.out.println("当前线程 : "  + Thread.currentThread().getName() + " 进入lock1执行");
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (lock2) {
                    System.out.println("当前线程 : "  + Thread.currentThread().getName() + " 进入lock2执行");
                }
            }
        }
        if(tag.equals("b")){
            synchronized (lock2) {
                try {
                    System.out.println("当前线程 : "  + Thread.currentThread().getName() + " 进入lock2执行");
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (lock1) {
                    System.out.println("当前线程 : "  + Thread.currentThread().getName() + " 进入lock1执行");
                }
            }
        }
    }
    
    public static void main(String[] args) {
        
        DeadLock d1 = new DeadLock();
        d1.setTag("a");
        DeadLock d2 = new DeadLock();
        d2.setTag("b");
         
        Thread t1 = new Thread(d1, "t1");
        Thread t2 = new Thread(d2, "t2");
         
        t1.start();
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        t2.start();
    }   
}

相关文章

  • Java-多线程(四)死锁

    死锁 死锁示例

  • 死锁示例

    死锁示例 由于两个锁对象lock1,lock2是static只存在一份,导致两个线程执行时会相互等待已经被获得的琐...

  • java并发--java死锁

    本篇结构: 前言 什么是死锁 产生死锁的必要条件 死锁的代码示例 死锁排查 如何避免死锁 总结 一、前言 今天被问...

  • JVM_JMM: 死锁的检测

    死锁的示例代码: 通过jconsole来检测死锁: 名称: Thread-1状态: java.lang.Class...

  • SimpleDateFormat是线程不安全的

    示例 结果 可以看到,结果不对,也死锁了。

  • 死锁的示例

  • Java死锁示例

    以下是Java中死锁的两个示例,一个是同步代码块嵌套,一个是同步方法互相调用。 示例说明 同步代码块嵌套 这个例子...

  • Java死锁检测之ThreadMXBean

    看此文章前请先了解之前一篇文章 "Java死锁之理解死锁" 中的死锁示例java 中提供了可以检测死锁的工具类Th...

  • 死锁 deadLock

    什么是死锁 如果两个线程互相持有对方获得的锁 并尝试获得对方的那把锁 就会造成死锁 死锁的示例代码 死锁如何使用j...

  • Java--死锁以及死锁的排查

    最近遇到了死锁的问题,所以这里分析并总结下死锁,给出一套排查解决方案。 死锁示例一 清单一 清单一代码有点长,但是...

网友评论

      本文标题:死锁示例

      本文链接:https://www.haomeiwen.com/subject/ulbccxtx.html