求助:我敲的马士兵的死锁例子没有出现死锁是为什么呢?

Leon_Ang 2017-05-22 09:35:22
网上有人说原因是没设置Object类为static
可是我写了啊,,,为什么还是不能死锁。。。求高手指点= =

/**
* Created by Leon on 2017/5/22.
*/
public class TestDeadLock implements Runnable
{
public int flag=1;
public static Object o1=new Object();
public static Object o2=new Object();

public void run()
{
System.out.println("flag="+flag);
if (flag==1)
{
synchronized(o1)
{
try
{
Thread.sleep(500);
}
catch(Exception e)
{
e.printStackTrace();
}
}
synchronized (o2)
{
System.out.println("1");
}
}
if (flag==0)
{
synchronized (o2)
{
try
{
Thread.sleep(500);
}
catch (Exception e)
{
e.printStackTrace();
}
}
synchronized (o1)
{
System.out.println("0");
}
}
}
public static void main(String[] args)
{
TestDeadLock td1=new TestDeadLock();
TestDeadLock td2=new TestDeadLock();
td1.flag=1;
td2.flag=0;

Thread t1=new Thread(td1);
Thread t2=new Thread(td2);

t1.start();
t2.start();
}
}


输出是:
flag=1
flag=0
1
0
...全文
85 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Leon_Ang 2017-05-22
  • 打赏
  • 举报
回复
引用 1 楼 pany1209 的回复:


public class TestDeadLock implements Runnable
{
    public int flag=1;
    public static Object o1=new Object();
    public static Object o2=new Object();
 
    public void run()
    {
        System.out.println("flag="+flag);
        if (flag==1)
        {
            synchronized(o1)
            {
                try
                {
                    Thread.sleep(500);
                    synchronized (o2)
                    {
                        System.out.println("1");
                    }
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
            }
        }
        if (flag==0)
        {
            synchronized (o2)
            {
                try
                {
                    Thread.sleep(500);
                    synchronized (o1)
                    {
                        System.out.println("0");
                    }
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        }
    }
    public static void main(String[] args)
    {
        TestDeadLock td1=new TestDeadLock();
        TestDeadLock td2=new TestDeadLock();
        td1.flag=1;
        td2.flag=0;
 
        Thread t1=new Thread(td1);
        Thread t2=new Thread(td2);
 
        t1.start();
        t2.start();
    }
}
啊 这个问题好弱智。。。。捂脸遁orz
李德胜1995 2017-05-22
  • 打赏
  • 举报
回复


public class TestDeadLock implements Runnable
{
    public int flag=1;
    public static Object o1=new Object();
    public static Object o2=new Object();
 
    public void run()
    {
        System.out.println("flag="+flag);
        if (flag==1)
        {
            synchronized(o1)
            {
                try
                {
                    Thread.sleep(500);
                    synchronized (o2)
                    {
                        System.out.println("1");
                    }
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
            }
        }
        if (flag==0)
        {
            synchronized (o2)
            {
                try
                {
                    Thread.sleep(500);
                    synchronized (o1)
                    {
                        System.out.println("0");
                    }
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        }
    }
    public static void main(String[] args)
    {
        TestDeadLock td1=new TestDeadLock();
        TestDeadLock td2=new TestDeadLock();
        td1.flag=1;
        td2.flag=0;
 
        Thread t1=new Thread(td1);
        Thread t2=new Thread(td2);
 
        t1.start();
        t2.start();
    }
}

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧