java死锁小程序

426关注882浏览

package Thread;

public class TestDeadLock implements Runnable{

int flag = 1;
static Object o1 = new Object();
static Object o2 = new Object();

public static void main(String[] args) {
TestDeadLo

展开全部
收起
2回答
提交回答
  • 至过去的我

    2044人对此回答表示赞同

    我是未来的你,你现在是不是在年找寻小程序答案。你不要感觉诧异,给你来信原因,就是让你不在后悔。今天去学习如何推广小程序,相信......点击查看更多>
    发布于
  • 庄晋

    16人对此回答表示赞同

    t1和t2两个线程,假设首先t1进入run()方法,然后判断flag是否为1,为1则利用对象o1将下面那段代码锁住,与此同时t2进入run()方法,判断flag,为0,则利用o2将下面那段代码锁住,再回过头来,此时t1继续向下执行,执行到synchronized(o2)这,此时o2对象已经被t2锁住,所以o1开始等待o2对象释放锁标记,同理,t2继续往下执行,执行到synchronized(o1)这,也就开始等待o1对象释放锁标记.这样互相等待,就产生死锁.

    如果不static,那
    展开
    16
    0回复
    发布于 6年前

    评论(0)

    收起评论

  • Emily3

    8人对此回答表示赞同

    比如:首先加了static使得t和tt这两个对象在两个进程里都是同一个对象,这是产生死锁的根源。
    h.start(); h线程里的falg为一,线程启动后首先给t加锁,这个时候t是被锁的状态,而tt是没锁状态,然后停下。这个时候g线程启动,flag为0,起来首先g线程给tt对象加锁,这个时候t和tt都被加上了锁,然后g线程停下。运行换到h线程,而h线程接着要做的是给tt加锁,但是tt已经让g线程给锁了,所以h线程要等待g线程释放锁而等待。这时又回到了g线程,g线程则是要给t加锁,但是t已经被h线
    展开
    8
    0回复
    发布于 6年前

    评论(0)

    收起评论

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
咨询热线

13312967497

扫码添加业务即可随时咨询 还可领取小程序推广攻略

业务咨询: 13312967497
扫码咨询

扫码咨询套餐

回到顶部