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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ぃ_牵挂那无止尽 初级黑马   /  2014-5-21 17:58  /  1456 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

死锁是什么现象

5 个回复

倒序浏览
  1. class Deadlocked implements Runnable{

  2.         boolean flag;
  3.         Deadlocked(boolean flag)
  4.         {
  5.                 this.flag=flag;
  6.         }
  7.         @Override
  8.         public void run() {
  9.                 // TODO Auto-generated method stub
  10.                 if(flag)
  11.                 {
  12.                         synchronized(Lock.DEADLOCKA)
  13.                         {
  14.                                 try{Thread.sleep(10);}catch(InterruptedException e){}
  15.                                 System.out.println("if locka");
  16.                                 synchronized(Lock.DEADLOCKB)
  17.                                 {
  18.                                        
  19.                                         System.out.println("else lockb");
  20.                                 }
  21.                         }
  22.                 }
  23.                 else
  24.                 {
  25.                         synchronized(Lock.DEADLOCKB)
  26.                         {
  27.                                 try{Thread.sleep(10);}catch(InterruptedException e){}
  28.                                 System.out.println("if lockb");
  29.                                 synchronized(Lock.DEADLOCKA)
  30.                                 {
  31.                                         System.out.println("else locka");
  32.                                 }
  33.                         }
  34.                 }
  35.         }
  36.        
  37.        
  38. }

  39. class Lock{
  40.         public static final Lock DEADLOCKA=new Lock();
  41.         public static final Lock DEADLOCKB=new Lock();
  42. }
  43. public class ThreadTest5_Deadlocked {
  44.    public static void main(String [] args)
  45.    {
  46.            Deadlocked d1=new Deadlocked(true);
  47.            Deadlocked d2=new Deadlocked(false);
  48.            Thread t1=new Thread(d1);
  49.            Thread t2=new Thread(d2);
  50.            t1.start();
  51.            t2.start();
  52.    }
  53. }
复制代码

一个死锁的小程序,比如两人一人只有一只筷子,有饭,都想吃饭 但是必须得要一双筷子,然后两个人谁也不给谁自己手里的那只 所以都吃不上。这个过程比作是死锁吧 。也有和谐的时候就是一方妥协的

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 赞一个!

查看全部评分

回复 使用道具 举报
多线程并发执行时,相互调用资源导致程序无法执行相互等待
回复 使用道具 举报
两个人每个人手里有一根筷子,都不给对方,所以谁都吃不了饭!所以这俩人都饿死了!筷子就是锁!人就是线程!明白不?
回复 使用道具 举报
2个对象同时访问,操作一个方法,或数据,会影响数据的正确性,需要用到锁,如果不用锁,就会出现死锁,所谓死锁比如:你在系统上用一个软件打开一个文件,但是另一边一操作把他删掉,这时就出现了死锁,要等那个软件用完了那个文件,你才能操作它,在实际函数中,就是2个对象操作同一份数据,存在数据的不安全,与正确性,希望对你有所帮助,
回复 使用道具 举报
发生死锁是由于进程请求资源时,资源被其他进程占有,且不可抢夺,而请求资源的进程本身有占着其他进程需要的资源,这样形成了一个循环,每个进程都占有资源,但是所需的其他资源被其他进程占有,使得所有的进程无法完成任务结束,形成死锁
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马