zoukankan      html  css  js  c++  java
  • 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);
        }

    }

  • 相关阅读:
    大地坐标
    坐标转换
    哈希&查找树@堆
    设计模式--工厂模式(c++)
    STL容器的删除操作
    istringstream & ostringstream & stringstream
    第九次集体开发
    第八次开发
    我组举行第十四次立会暨第七次集体项目开发
    第十三次立会暨第六次集体开发
  • 原文地址:https://www.cnblogs.com/lilefordream/p/3615888.html
Copyright © 2011-2022 走看看