zoukankan      html  css  js  c++  java
  • ReentrantLock

    假如线程A和线程B使用同一个锁LOCK,此时线程A首先获取到锁LOCK.lock(),并且始终持有不释放。

    如果此时B要去获取锁,有四种方式:

    • LOCK.lock(): 此方式会始终处于等待中,即使调用B.interrupt()也不能中断,除非线程A调用LOCK.unlock()释放锁。

    • LOCK.lockInterruptibly(): 此方式会等待,但当调用B.interrupt()会被中断等待,并抛出InterruptedException异常,否则会与lock()一样始终处于等待中,直到线程A释放锁

    • LOCK.tryLock(): 该处不会等待,获取不到锁并直接返回false,去执行下面的逻辑

    • LOCK.tryLock(10, TimeUnit.SECONDS):该处会在10秒时间内处于等待中,但当调用B.interrupt()会被中断等待,并抛出InterruptedException。10秒时间内如果线程A释放锁,会获取到锁并返回true,否则10秒过后会获取不到锁并返回false,去执行下面的逻辑。

    作者:郭无心
    链接:https://www.zhihu.com/question/36771163/answer/68974735
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    /**
     * @author 作者 E-mail:
     * @version 创建时间:2015-10-23 下午01:53:10 类说明
     */
    public class TestLockInterruptibly
    {
    
        // @Test
        public void test3() throws Exception
        {
            final Lock lock = new ReentrantLock();
            lock.lock();
    
            Thread t1 = new Thread(new Runnable()
            {
                @Override
                public void run()
                {
                    try
                    {
                        lock.lockInterruptibly();
                    }
                    catch(InterruptedException e)
                    {
                        System.out.println(Thread.currentThread().getName() + " interrupted.");
                    }
                }
            }, "child thread -1");
    
            t1.start();
            Thread.sleep(1000);
    
            t1.interrupt();
    
            Thread.sleep(1000000);
        }
    
        public static void main(String[] args) throws Exception
        {
            new TestLockInterruptibly().test3();
        }
    }
    

      

  • 相关阅读:
    字符的编码
    数据的基本类型和内置方法(二)
    基本的数据类型和内置方法介绍 (一)
    流程运算 if while for
    用户交换 基本数据类型 基本运算符 格式化输出
    机器语言发展简介和变量的介绍
    计算机基础
    Python学习建议和要求总结
    CH135 最大子序和 题解报告
    HRBUST1356 Leyni,罗莉和队列 题解报告
  • 原文地址:https://www.cnblogs.com/lnas01/p/7896087.html
Copyright © 2011-2022 走看看