• java 线程的死锁问题


    以下的情况可能出现死锁

    1.一个对象的同步方法去调用另一个对象的同步方法,同时另一个对象的同步方法也在调用这个对象的同步方法,导致一定几率的死锁,不一定每次都会出现死锁,模拟的代码如下

    package threadpool;

    public class DeadThreadDemo {
      public static void main(String[] args) {
        new DeadThread();
      }
    }
    //顾客
    class Customer{
      public synchronized void say(Waiter w ){
        System.out.println("顾客说先办事,在给钱");
        w.doService();
      }

      public synchronized void doService( ){
        System.out.println("可以先给钱,再办事");
      }
    }


    class Waiter{
      public synchronized void say(Customer c){
        System.out.println("服务员说先给钱,才办事");
        c.doService();
      }

      public synchronized void doService(){
        System.out.println("ok先办事, 先给钱");
      }
    }

    //死锁线程
    class DeadThread implements Runnable{
        Customer c = new Customer();
        Waiter w = new Waiter();
        public DeadThread(){
          new Thread(this).start(); //构造方法里启动线程,互相调用的间隔短,几率更大
          w.say(c);
        }
        @Override
        public void run() {
        // TODO Auto-generated method stub
        c.say(w);
        }

    }

  • 相关阅读:
    Powershell分支条件
    Powershell基础
    初识PowerShell
    设计模式--策略模式
    设计模式--简单工程模式
    StandardWrapper
    Tomcat的安全性
    算法效率 简单的增长率 参照

    排序算法之 归并排序
  • 原文地址:https://www.cnblogs.com/lilefordream/p/3615888.html
Copyright © 2020-2023  润新知