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);
        }

    }

  • 相关阅读:
    MySQL "show users"
    MySQL
    A MySQL 'create table' syntax example
    MySQL backup
    MySQL show status
    Tomcat, pathinfo, and servlets
    Servlet forward example
    Servlet redirect example
    Java servlet example
    How to forward from one JSP to another JSP
  • 原文地址:https://www.cnblogs.com/lilefordream/p/3615888.html
Copyright © 2011-2022 走看看