美文网首页
关于可重入锁的原理及简单实现

关于可重入锁的原理及简单实现

作者: 天边的鱼 | 来源:发表于2018-10-18 18:41 被阅读0次

    关于并发包当中的ReenTrantLock 的实现等我研究完ConcurrentHashMap 之后再看看

    可重入锁使用的目的:

            保证线程访问时的线程安全;

    与普通锁的区别:

            可重入锁可以避免线程死锁

    场景描述:多线程访问场景,其中获得了锁的线程可能重复获得锁   

    即:  Thread1  --->lock     Thread2 ---> wait()   Thread3 ----> wait()     Thread4 ---> wait()   

             Thread1 ---->lock  (重复加锁  如果解锁过程只有一次 则造成死锁)  

    public  class  Lock{

            boolean  isLocked  =  false;

            Thread  lockBy  =  null  ;

             int   lockCount  =  0;

             public  synchronized  void  lock ()  {                ////////加锁方式

                    Thread  thread  =  Thread.currentThread();

                    while(  isLocked  &&  lockBy != thread ){

                                wait () ;

                     }

                    isLocked = true ;

                    lockCount ++ ;

                    lockBy = thread; 

           } 

           public  synchronized  void  unlock () {

                   if ( Thread . currentThread (  )  == this . lockBy )  {

                            lockCount --;                  //////////  防止出现获得了锁的线程双重加锁后   却只解锁一遍  造成死锁

                            if ( lockCount == 0 ) {

                                    isLocked  =  false ;

                                    notify();

                            }    

                    }

            }

    }

    相关文章

      网友评论

          本文标题:关于可重入锁的原理及简单实现

          本文链接:https://www.haomeiwen.com/subject/fhrszftx.html