关闭

线程中的死锁问题

标签: Sychronized死锁
352人阅读 评论(0) 收藏 举报
分类:

线程中的死锁都是发生在多个线程中的,多个线程中存在多个同步锁,这几个线程相互索取对方锁的钥匙造成的僵持局面
多个线程中的多个同步锁,先后索取对方锁的钥匙时,有时也会出现和谐的状态,如两个人吵架,相互不让,结果某一刻突然相互谅解了对方就进入和谐的状态了。


下面是一个线程死锁的例子:
例:
class RunnableImp implements Runnable
{
     boolean flag = true;
     Object obj1 = new Object();
     Object obj2 = new Object();
     public void run(){
          if(flag){
               synchronized(obj1){//第一个线程1先获得obj1对象锁,并将其锁住
                   
                         System.out.println(Thread.currentThread().getName()+"先获得obj1");
                         try{
                              Thread.sleep(1000);//先让线程1睡眠一段时间,让线程2有时间去获得obje2对象锁
                         }catch(Exception e){}
                         synchronized(obj2){//线程1醒来后,想去获得obj2锁,但是此锁已经被线程2获得并锁住了,所以需要等待线程2解开obj2锁
                              System.out.println(Thread.currentThread().getName()+"想获得obj2");
                         }
                   
               }
          }else{
               synchronized(obj2){//第二个线程2在线程1睡眠时先获得obj2对象锁,同样也将其锁住
                   
                         System.out.println(Thread.currentThread().getName()+"先获得obj2");
                         try{
                              Thread.sleep(1000);//让线程2睡眠一段时间,如果线程2先启动,就可以先让线程1先去获得obj1锁
                         }catch(Exception e){}
                         synchronized(obj1){
                              System.out.println(Thread.currentThread().getName()+"想获得obj1");
                         }
              
               }
          }
     }
}
public class TestRunnable
{
     public static void main(String[] args)
     {
          RunnableImp r = new RunnableImp();
          Thread t1 = new Thread(r,"线程1");
          Thread t2 = new Thread(r,"线程2");
          t1.start();
          try{
               Thread.sleep(100);
          }catch(Exception e){}
          r.flag = false;
          t2.start();
     }
}



死锁分析:



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:60038次
    • 积分:1401
    • 等级:
    • 排名:千里之外
    • 原创:79篇
    • 转载:31篇
    • 译文:0篇
    • 评论:4条
    最新评论