多线程死锁代码

原创 2017年07月18日 01:56:15

死锁

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

代码实战:

/**
 * Created by FireLang on 2017-07-18.
 */
public class DieThread extends Thread{
    /**
     * 定义两把锁
     */
    private String lock1 = "Lock1";
    private String lock2 = "Lock2";

    /**
     * 运行if 或 else 代码
     */
    private boolean flag = true;

    public DieThread(boolean flag){
        //初始化 flag 的值,让它执行 if 或 else 代码
        this.flag = flag;
    }
    /**
     * 书写死锁代码
     */
    @Override
    public void run() {
        if(flag){
            synchronized (lock1){
                System.out.println("进入 IF LOCK1 !!!!!");
                synchronized (lock2){
                    System.out.println("进入 IF LOCK2 !!!!!");
                }
            }
        }else{
            synchronized (lock2){
                System.out.println("进入 ELSE LOCK2 !!!!!");
                synchronized (lock1){
                    System.out.println("进入 ELSE LOCK1 !!!!!");
                }
            }
        }
    }

    /**
     * 测试代码
     * @param args
     */
    public static void main(String[] args) {
        DieThread d1 = new DieThread(true);
        DieThread d2 = new DieThread(false);

        d1.start();
        d2.start();
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

SpringMVC拦截器执行过程源码分析

查看博客:拦截器的基本使用介绍从这篇博客我们可以知道,前端SpringMVC前端控制器的主要逻辑基本上都在doDispatch()方法里面。分析注意:下面我要说的Handler是一个统称,一个处理器的...

线程和进程、程序、应用程序之间的关系

看到一种说法是“一个程序至少有一个进程,一个进程至少有一个线程”,这种把程序与进程,进程与线程的关系混淆的说法是错误的。 程序(program)只能有一个进程,一个进程就是一个程序。有人说,我打开一个...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

JAVA String对象和字符串常量的关系解析

JAVA String对象和字符串常量的关系解析1 字符串内部列表   JAVA中所有的对象都存放在堆里面,包括String对象。字符串常量保存在JAVA的.class文件的常量池中,在编译期就确定好...

Java中通过反射越过泛型检查

要想Java通过反射越过泛型检查,你就得先明白,泛型是在什么时候起作用的。 泛型是在编译期间起作用的。在编译后的.class文件中是没有泛型的。所有比如T或者E类型啊,本质都是通过Object处理的。...

SpringMVC的Handler通过继承AbstractController实现

介绍SpringMVC的Handler通过实现Controller接口外,还可以通过继承AbstractController这个抽象类来实现。实践创建Handler。public class Item...

水到渠成的一个多线程安全案例【多窗口售票】别以为很简单,你看了绝对不会让你失望!

多线程安全问题分析在明白了多线程中会引发安全问题的几个重要点后,理解下面的程序你就会非常的轻松。个人理解总结会引发多线程安全问题的几个重要点:1.多线程中,每个线程都会从主内存中拷贝变量值到多线程工作...

Java常用的数据库连接池【c3p0】【dbcp】

连接池介绍为什么使用数据库连接池??因为创建数据库connection对象,是一个非常浪费时间的过程,并且connection本来就是可以反复使用的。所以我们没必要关闭connection连接,既然不...

多线程面试题【一】

1:多线程有几种实现方案,分别是哪几种? 两种。继承Thread类 实现Runnable接口扩展一种:实现Callable接口。这个得和线程池结合。 2:同步有几种方式,分别是什么? ...

Java中反射的概述

对于反射传智播客的说法: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)