lock.lockInterruptibly(),lockinterruptibly作用
00-1010 1.锁定方法2。LockInterruptible方法3.tryLock方法4.tryLock(long,TimeUnit)方法5。总结在锁接口中,获取锁的方法有 4 个:锁(),tryLock(),tryLock(long,TimeUnit),LockInterruptible(),为什么需要这么多方法?这些方法有什么区别?接下来我们就来看看。
00-1010Lock方法是锁接口当有可用锁时会直接得到锁并立即返回,当没有可用锁时会一直等待,直到获取到锁为止,中获取锁的最基本方法,其基本用法如下:
lock lock=new reentrant lock();//获取锁lock . lock();尝试{//执行业务代码.}最后{//释放锁lock . unlock();}
00-1010 lock interruptable方法类似于lock方法。* *当有可用锁时,它会直接获取锁并立即返回。如果没有可用的锁,它将一直等到获得锁。但是,与lock方法不同,lockinterruptbly方法在遇到线程中断时会放弃获取锁。* *其基本用法如下:
lock lock=new reentrant lock();Try {//获取锁lock . lock interrupt();尝试{//执行业务方法.}最后{//释放锁lock . unlock();} } catch(interrupted exception e){ e . printstacktrace();}PS:使用thread.interrupt()方法中断线程执行。
00-1010与前两种方法不同。使用不带参数的tryLock方法将尝试获取锁,并立即返回获取锁的结果(true或false)。如果有可用的锁,它将返回true并获得这个锁,如果没有可用的锁,它将立即返回false。其基本用法如下:
lock lock=new reentrant lock();//获取锁布尔结果=lock . try lock();如果(result) {try {//成功获得锁,执行业务代码.}最后{//释放锁lock . unlock();}} else {//执行获取锁失败的业务代码.}
00-1010 * *带参数的tryLock(long,TimeUnit)方法需要设置两个参数。第一个参数是Long类型的超时,第二个参数是参数一的时间类型描述(比如第一个参数是3,是3秒还是3分钟是第二个参数最终决定的)。如果在此期间获得了可用锁,则返回true如果在定义的时间内没有获得锁,则返回false。* *其基本用法如下:
lock lock=new reentrant lock();Try {//获取锁(最多等待3s,无法获取锁则返回false)boolean result=lock . try lock(3,time unit . seconds);如果(result) {try {//成功获得锁,执行业务代码.}最后{//释放锁lock . unlock();}} else {//执行获取锁失败的业务代码.}} catch(中断异常){ e . printstacktrace();}
00-1010lock()、tryLock()、tryLock(long,TimeUnit)和lockinterrupt()都是用来获取锁的,锁方法如果得不到锁会一直阻塞等待;lockInterruptibly方法可以阻止等待获取锁,但它可以响应线程中途中断。不带参数的TryLock (long,TimeUnit)方法会立即返回一个获取锁成功和失败的结果,而带参数的tryLock(long,time unit)方法会返回一个在设定时间内获取锁成功和失败的结果。这四种方式的特点各不相同,需要根据实际业务情况选择合适的锁获取方式。
关于Java中lock和tryLock以及lockInterruptibly的区别,本文到此为止。有关Java lock的更多信息,请搜索以前关于流行IT的文章或继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。