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

      

  • 相关阅读:
    laravel 5.5 仓库模式 文件之间接口与实现操作
    php 无线分类 根据子级找父级
    php 无限极分类,根据父级 找子级
    laravel5.4 中 dd和dump的区别。
    laravel hash密码生成和密码验证
    oracle建表详细信息
    关于组件的认识
    java的Thread Dump诊断工具
    weblogic连接池
    详解Oracle数据字典
  • 原文地址:https://www.cnblogs.com/lnas01/p/7896087.html
Copyright © 2011-2022 走看看