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();
        }
    }
    

      

  • 相关阅读:
    l1-010
    l1-009
    L1-008修改
    l1-008
    Codeforces Round #406 (Div. 2)
    求N!的长度【数学】 51nod 1058 1130
    51nod 1090 & 1267 【二分简单题】
    Codeforces Round #405 (Div. 2)
    Codeforces Round #404 (Div. 2)
    PAT 天梯赛真题集(L2、L3)
  • 原文地址:https://www.cnblogs.com/lnas01/p/7896087.html
Copyright © 2011-2022 走看看