线程死锁是怎么出现的?用Java实现线程死锁

Java线程死锁

 在上一篇《java线程同步》中,我们思考了一个问题,那就是当多个线程在都在等待其他线程释放共享资源时,所有的线程都就不能继续下去了,这在java运行过程中是一种很严重的问题,俗称java死锁。

下面是2个线程的死锁代码:

    //同步类
    public class DeadLock {
        private String str1 ="1";
        private String str2="2";

        public void method1(){
            synchronized (str1){
                System.out.println("线程"+str1+"正在执行");
                try {
                    Thread.sleep(1000);
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
                synchronized (str2){
                    System.out.println("线程运行结束");
                }
            }
        }

        public void method2(){
            synchronized (str2){
                System.out.println("线程"+str2+"正在执行");
                try {
                    Thread.sleep(1000);
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
                synchronized (str1){
                    System.out.println("线程运行结束");
                }
            }
        }

    }

    //实现的runnable类
    public class SynchronizeRunnable implements Runnable {

        private DeadLock deadLock=new DeadLock();

        public void method(){
            deadLock.method2();
        }

        @Override
        public void run(){
            deadLock.method1();
        }
    }

    //执行方法
    public  void  threadone() throws Exception{
        SynchronizeRunnable runnable=new SynchronizeRunnable();
        Thread thread1=new Thread(runnable);
        thread1.start();
        runnable.method();
    }

结果如下:

线程2正在执行
线程1正在执行

我们看到,主线程与thread1线程由于都在等对方释放资源,所以卡死了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值