zoukankan      html  css  js  c++  java
  • Java中线程死锁问题

    我们在使用Thread时,在使用线程同步时可能会出现死锁,而死锁产生的原因是:

    例:

    两个类中各有两个方法,而这四种发放同步,比如顾客与服务员解决“先付款还是后付款”的问题时,就会产生死锁。

    死锁产生的条件:

    互斥条件

    请求保持条件

    不可剥夺条件

    环路等待

    死锁的原因:

    资源竞争和进程顺序推进不当

    代码:

     1 package ThreadDemo;
     2 
     3 //在一个同步方法中调用另一个对象的同步方法,可能产生死锁
     4 //死锁
     5 public class ThreadDemo7 {
     6     public static void main(String[] args) {
     7         new DeadThread();
     8     }
     9 }
    10 
    11 class DeadThread implements Runnable{
    12     Customer c = new Customer();
    13     Waiter w = new Waiter();
    14     public DeadThread(){
    15         new Thread(this).start();
    16         w.say(c);
    17     }
    18     @Override
    19     public void run() {
    20         // TODO Auto-generated method stub
    21         c.say(w);
    22     }
    23 }
    24 
    25 //顾客
    26 class     Customer{
    27     public synchronized void say(Waiter w){
    28         System.out.println("顾客说:先吃饭再买单");
    29         w.doService();
    30     }
    31     public synchronized void doService(){
    32         System.out.println("买完单再吃饭");
    33     }
    34 }
    35 class Waiter{
    36     public synchronized void say(Customer c){
    37         System.out.println("服务员说:先买单再吃饭");
    38         c.doService();
    39     }
    40     public synchronized void doService(){
    41         System.out.println("吃完饭再买单");
    42     }
    43 }
  • 相关阅读:
    用stetho通过网页访问手机数据库
    Python学习笔记(一)
    Linux学习笔记(四)Linux常用命令
    Linux学习笔记(三)Shell命令机制
    Linux学习笔记(一)
    Linux学习笔记(五)Linux应用程序的安装和卸载
    Linux学习笔记(二)Shell教程
    Linux学习笔记(六)Linux服务程序的安装和卸载
    前端模块总结
    div+css命名规范
  • 原文地址:https://www.cnblogs.com/skyyuan/p/9241757.html
Copyright © 2011-2022 走看看