关闭

多线程死锁代码

标签: Java多线程
384人阅读 评论(0) 收藏 举报
分类:

死锁

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

代码实战:

/**
 * 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();
    }
}
0
0
查看评论

多线程 —— 死锁代码展示

死锁的意思其实就是相互等待。一个生活中的简单例子:我们去包子铺吃包子。客户坚持:先吃包子,后付钱。 卖家坚持:先付钱以后,才能吃包子。两边如果都坚持自己的原则,对于客户买包子,卖家卖包子赚钱这件事都阻塞在这里了,相持不下,就好像程序“死”在那里一样。首先创建两把锁。/** * Created b...
  • lw_power
  • lw_power
  • 2016-07-24 10:35
  • 2468

多线程编程(一)——写一个简单的死锁

(整个九月忙着找工作,好多收获,好多遗憾,最终结局还可以接受,技术路还很远,再接再厉!面去哪儿网时,写惯了算法的我突然让写了几个多线程编程,有点蒙蔽,最近好好整理一下) 死锁发生的原因: 1、系统资源有限 2、进程或线程推进顺序不恰当 3、资源分配不当 死锁发生的四个条件: 1、互斥条件:一份资源每...
  • zhangliangzi
  • zhangliangzi
  • 2016-10-03 19:11
  • 3379

一起talk C栗子吧(第一百一十七回:C语言实例--线程死锁一)

各位看官们,大家好,上一回中咱们说的是线程同步之互斥量的例子,这一回咱们说的例子是:线程死锁。闲话休提,言归正转。让我们一起talk C栗子吧!
  • talk_8
  • talk_8
  • 2016-02-01 21:30
  • 1484

多线程造成死锁的例子

1、假设有如下代码    pthread_mutex_t mutex;   //代表一个全局互斥对象    void  A()       {   &#...
  • fycy2010
  • fycy2010
  • 2015-08-13 22:51
  • 1328

多线程死锁及解决办法

死锁是由于不同线程按照不同顺序进行加锁而造成的。如: 线程A:对lock a加锁 => 对lock b加锁 => dosth => 释放lock b => 释放lock a 线程B:对lock b加锁 ...
  • zgaoq
  • zgaoq
  • 2017-05-18 17:22
  • 1007

一个多线程的死锁和锁争用的例子

在多线程编程中,为了保持同步,需要使用互斥锁保护临界区,但是多线程共同使用互斥锁的时候会造成死锁或者锁争用的情况: 死锁: 产生死锁的原因主要是: (1) 因为系统资源不足。 (2) 进程运行推进的顺序不合适。 (3) 资源分配不当等。 如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能...
  • yusiguyuan
  • yusiguyuan
  • 2014-03-25 09:14
  • 3388

c++多线程之死锁的发生的情况解析(包含两个归纳,6个示例)

一、死锁会在什么情况发生 1、假设有如下代码 mutex; //代表一个全局互斥对象 void A() { mutex.lock(); //这里操作共享数据 B(); //这里调用B方法 ...
  • i_likechard
  • i_likechard
  • 2017-10-11 17:16
  • 171

(十四)java多线程之死锁

本人邮箱: kco1989@qq.com 欢迎转载,转载请注明网址 http://blog.csdn.net/tianshi_kco github: https://github.com/kco1989/kco 代码已经全部托管github有需要的同学自行下载 引言多线程如果设计的...
  • tianshi_kco
  • tianshi_kco
  • 2016-10-31 22:11
  • 563

Java 多线程同步与死锁

在多线程中如何找到安全问题所在: 1,明确哪些代码是多线程运行代码 2,明确共享数据 3,明确多线程运行代码中哪些代码是操作共享数据的 静态的同步方法中,使用锁是该方法所在类的字节码文件对象,即 类名.class  前天俺们谈到了加锁,但是在使用加锁的...
  • pjz90
  • pjz90
  • 2013-03-10 14:51
  • 6029

多线程引起多事务导致索引争用引起数据库死锁

背景及现象          线上生产环境在某些时候经常性的出现数据库操作死锁,导致业务人员无法进行操作。经过DBA的分析,是某一张表的insert操作和delete操作发生了死锁。简单介绍下数据库的情况(因...
  • yuyuyuyu5200
  • yuyuyuyu5200
  • 2016-09-23 16:48
  • 734
    个人资料
    • 访问:318968次
    • 积分:6584
    • 等级:
    • 排名:第4369名
    • 原创:285篇
    • 转载:143篇
    • 译文:0篇
    • 评论:134条
    FireLang-PX
    最新评论