文档章节

26.多线程----死锁

Lucky_Me
 Lucky_Me
发布于 2017/08/02 19:08
字数 341
阅读 8
收藏 0

1.现象 两个线程都在等待  

2.代码

2.1造两个线程锁类

2.2 实现多线成类

2.3 测试类

3.代码

3.1 造锁对象类

package cn.ma.dielock;
/**
 * 造两把锁对象
 *
 */
public class myLock {
    public static final Object objA = new Object();
    
    public static final Object objB = new Object();
}
 

3.2 实现多线成类

package cn.ma.dielock;

public class dieLock extends Thread {
    private Boolean flag;//1.标记
    //2.带参构造 为了给flag赋值
    public dieLock(boolean flag) {
        this.flag=flag;
    }
    @Override
    public void run() {
        if (flag) {
            synchronized (myLock.objA) {//线程A
                System.out.println("我是objA对象");
                synchronized (myLock.objB) {// 确需要线程B 对象锁
                    System.out.println("我是objB对象");
                }
            }
        } else {
            synchronized (myLock.objB) {//线程B
                System.out.println("我是objB对象");
                synchronized (myLock.objA) {// 确需要线程A 对象锁
                    System.out.println("我是objA对象");
                }
            }
        }
    }
    public Boolean getFlag() {
        return flag;
    }
    public void setFlag(Boolean flag) {
        this.flag = flag;
    }
}
 

3.3测试类

package cn.ma.dielock;
/**
 * 死锁:
 *         就是多个线程互相那调用对方的锁对象,但是对方又没有释放锁对象,导致互相等待现象
 *
 */

public class Test {
        public static void main(String[] args) {
        //当线程d1 d2 同时执行的时候就会发生死锁问题    因为d1,d2都没有释放锁
            dieLock d1 = new dieLock(true);
            dieLock d2 = new dieLock(false);
            d1.start();
            d2.start();
        }
}
 

 

© 著作权归作者所有

Lucky_Me
粉丝 17
博文 232
码字总数 89440
作品 0
美国
私信 提问
精选30道Java多线程面试题

1、线程和进程的区别 2、实现线程有哪几种方式? 3、线程有哪几种状态?它们之间如何流转的? 4、线程中的start()和run()方法有什么区别? 5、怎么终止一个线程?如何优雅地终止线程? 6、T...

java技术栈
2017/08/13
0
0
多线程程序与fork()

多线程程序里不准使用fork UNIX上C++程序设计守则3 准则3:多线程程序里不准使用fork 在多线程程序里,在”自身以外的线程存在的状态”下一使用fork的话,就可能引起各种各样的问题.比较典型的...

长平狐
2012/09/03
523
0
高并发Java(5):JDK并发包1

在高并发Java(2):多线程基础中,我们已经初步提到了基本的线程同步操作。这次要提到的是在并发包中的同步控制工具。 1. 各种同步控制工具的使用 1.1 ReentrantLock ReentrantLock感觉上是...

卯金刀GG
2017/11/02
9
0
使用JDK自带的工具jstack找出造成运行程序死锁的原因

Java多线程编程也是Java面试中经常考察的内容。刚接触Java多线程编程的朋友们,可能会不慎写出一些会导致死锁(deadlock)的应用出来。如何分析造成Java多线程的原因呢?很多时候我们在怀疑造成...

全部原谅
2018/08/28
2
0
线程同步与死锁

一.多线程共享数据 在多线程的操作中,多个线程有可能同时处理同一个资源,这就是多线程的共享数据。 二.线程同步 解决数据共享的安全问题,必须使用同步,所谓同步就是指多个线程在同一个时...

tank_99
2016/11/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
10
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0
PHP+Ajax微信手机端九宫格抽奖实例

PHP+Ajax结合lottery.js制作的一款微信手机端九宫格抽奖实例,抽奖完成后有收货地址添加表单出现。支持可以设置中奖概率等。 奖品列表 <div class="lottery_list clearfix" id="lottery"> ......

ymkjs1990
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部