A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 纸牌屋 中级黑马   /  2016-7-26 23:34  /  492 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.itheima;

public class DeadThread {

private static String s = "筷子左";
private static String s1 = "筷子右";
public static void main(String[] args) {
  // TODO Auto-generated method stub
  new Thread(new Runnable(){
   public void run(){
    while(true){
     synchronized(s){
      System.out.println("已经拿到筷子左,等待筷子右");
      synchronized(s1){
       System.out.println("已经拿到筷子右,开吃");
      }
     }
    }
   }
  }).start();
  
  new Thread(){
   public void run(){
    while(true){
     synchronized(s1){
      System.out.println("已经拿到筷子右,等待筷子左");
      synchronized(s){
       System.out.println("已经拿到筷子左,开吃");
      }
     }
    }
   }
  }.start();
}
}
死锁算是金典了,面试的时候手写代码可能会用到,死锁问题直白来说就是两个人去饭店吃饭,只有一双筷子,结果一人各拿到了一只,互相都想要对方的筷子这样就导致无法吃饭,对应到java中就会产生程序卡死的情况,以上的死锁案例是用匿名对象完成的,使用了两种方法,第一个线程的用的是实现Runnable接口完成的,第二个线程使用继承Thread类完成的。匿名方式虽然看起来复杂,但习惯之后会发现写起来其实很方便。


2 个回复

倒序浏览
腻害,对匿名内部类的理解这么深入!
回复 使用道具 举报
学习面向对象的时候,匿名这个东西是我的硬伤,来研究研究
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马