多线程 死锁的模拟

Posted 健康平安的活着

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程 死锁的模拟相关的知识,希望对你有一定的参考价值。

一  代码实操

1.1 资源

public class ObjectTools 
    public static  Object  folk=new Object();
    public static Object  chlk=new Object();

1.2 子线程

public class ThreadA implements Runnable 
    @Override
    public void run() 
        synchronized (ObjectTools.chlk)
            System.out.println("线程:"+Thread.currentThread().getName()+" 获取筷子了!");
            try 
                Thread.sleep(2000);
             catch (InterruptedException e) 
                e.printStackTrace();
            
            synchronized (ObjectTools.folk)
                System.out.println("线程:"+Thread.currentThread().getName()+" 获取叉子了!");
            
        


    

线程2:

public class ThreadB implements Runnable 

        @Override
        public void run() 
            synchronized (ObjectTools.folk)
                System.out.println("线程:"+Thread.currentThread().getName()+" 获取叉子了!");
                try 
                    Thread.sleep(2000);
                 catch (InterruptedException e) 
                    e.printStackTrace();
                
                synchronized (ObjectTools.chlk)
                    System.out.println("线程:"+Thread.currentThread().getName()+"  获取筷子了!");
                
            


        

1.3 调用类

public class TestDl 
    public static void main(String[] args) 
        new Thread(new ThreadA()).start();
        new Thread(new ThreadB()).start();
    

1.4 结果

 

以上是关于多线程 死锁的模拟的主要内容,如果未能解决你的问题,请参考以下文章

多线程

对死锁的理解

futex 工具返回了意外的错误代码并已中止

多线程下的fork问题(模拟与解决)

多线程下的fork问题(模拟与解决)

多线程下的fork问题(模拟与解决)