文档章节

Java线程的死锁

BabyMason
 BabyMason
发布于 2014/10/31 15:14
字数 368
阅读 57
收藏 1
package com.meson.threaddeadlock.test;

/*
 * @ meson
 * 
 * 死锁的列子
 * 
 * 张三向李四要书
 * 李四向张三要画
 */
class Zhangsan {//张三类
    //索要图书
    public void say() {
        System.out.println("张三对李四说你给我书我把画给你");
    }
    //得到书
    public void get() {
        System.out.println("Zhangsan得到了书!!");
    }
};

class Lisi {//李四类
    //索要画
    public void say() {
        System.out.println("李四对张三说你 给我画我把书给你");
    }
    //得到画
    public void get() {
        System.out.println("Lisi得打了画");
    }
};

public class ThreadDeadLock  implements Runnable{//线程类
    
    
    public  boolean flag = false;//一个判断标识 判断谁先说话
    private static Zhangsan z = new Zhangsan();
    private  static Lisi l = new Lisi();

    @Override
    public void run() {//重写run方法
        // TODO Auto-generated method stub

        if (flag) {//true 张三先说话
            synchronized (z) {//同步张三 别的程序不能操作
                z.say();
                
                
                //睡眠 一段时间
                try {
                    Thread.sleep(500);

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                
                
                // 锁定李四 别的程序不能操作 
                //张三从李四手中得到画
                synchronized (l){
                    z.get();
                }
            }
            
        } else {
            synchronized (l) {//false李四先说话 同步李四 别的 不能进行操作
                l.say();
                
                
                //睡眠一段时间
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (z) {//得到画 同步张三才能得到张三手中的画
                    z.get();
                }
            }
            
        }

    }
    public static void main(String[] args) {
        
        
        ThreadDeadLock d1 = new ThreadDeadLock(    );
        ThreadDeadLock d2 = new ThreadDeadLock();
        d1.flag = true;
        d2.flag = false;
        Thread t1 = new Thread(d1);
        Thread t2 = new Thread(d2);
        //线程开始
        t1.start();
        t2.start();

    }
}


© 著作权归作者所有

BabyMason
粉丝 28
博文 31
码字总数 15527
作品 0
郑州
程序员
私信 提问
java中高级大公司多线程面试题

1)在Java中Lock接口比synchronized块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它? lock接口在多线程和并发编...

java成功之路
2018/10/30
0
0
15个顶级Java多线程面试题及回答

Java 线程面试问题 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分。如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题。在投资银行业务中多...

LCZ777
2014/05/27
751
0
Java命令行监控工具(jmap,jstack,jstat,jinfo,jps)

项目部署上线之后,线上项目是不能轻易修改的,定位问题的难度也会变大。因此监控是非常重要的一个环节,有了监控,我们才能更好的定位系统中的问题,从而排查。监控的工具有很多种, 但是j...

艾贺521
2018/07/11
0
0
Java面试:投行的15个多线程和并发面试题

本文由ImportNew -一杯哈希不加盐 翻译自dzone。欢迎加入翻译小组。转载请见文末要求。 多线程和并发问题已成为各种 Java 面试中必不可少的一部分。如果你准备参加投行的 Java 开发岗位面试,...

ImportNew
2018/08/23
0
0
【转】15个顶级Java多线程面试题及回答

Java 线程面试问题   在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分。如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题。在投资银行业务...

一只死笨死笨的猪
2014/09/30
376
0

没有更多内容

加载失败,请刷新页面

加载更多

WPF界面开发—看DevExpress如何实现对.NET Core 3.0中的VS集成

下载DevExpress v19.2完整版 DevExpress v19.2汉化资源获取 通过DevExpress WPF Controls,您能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代...

FILA6666
22分钟前
85
0
总结:Java锁机制

一、 synchronized 与 Lock 参考: https://www.cnblogs.com/myseries/p/10784076.html https://blog.csdn.net/zxd8080666/article/details/83214089 二、可重入锁与不可重入锁 可重入锁, ......

浮躁的码农
26分钟前
81
0
SpringBoot+Mybatis+ShardingJDBC实现数据分片

研究了一番ShardingShpere, 用SpringBoot+Mybatis+ShardingJDBC搭建了一个最简单的数据分区的构架,在此记录一下。 ShardingJDBC是基于Mybatis等ORM框架和数据库之间的一层中间件,简单地说...

莫在全
27分钟前
102
0
为什么要有边缘计算

我们处在信息化的革命时代,或者说是数字化革命的时代,总而言之就是电脑的时代,一个把各式各样的信息都进行数字化的时代,然后交给计算机处理。我们需要知道整个计算机发展的本质,本质就是...

Jesse_0
27分钟前
291
0
MetInfo 修改版权标识的文字和超链接是否构成侵权

根据《米拓企业建站系统最终用户授权许可协议》中的“无论以任何用途、程度、方式(修改或美化),只要使用MetInfo的整体或任何部分,未获得版权标识修改许可,网站页面的版权标识(Powered...

MetInfo
34分钟前
112
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部