同步机制之 ReentrantLock

ReentrantLock实现了Lock接口

Lock lock = new ReentrantLock();

lock(),调用后尝试获取锁,如果锁被占用了,则进入阻塞状态等待,类似于synchronized的作用,直到获取锁后才继续执行下面的方法,Thread.interrupt()是无法中断它的等待的。

lockInterruptibly(),作用和lock基本相同,不同的是:Thread.interrupt()会抛出异常使它中断等待。

ps.其实看方法就知道

void lockInterruptibly() throws InterruptedException;

这里抛出了InterruptedException异常,也就是可以被中断的,之后的几个方法同理。

 

tryLock(),不阻塞地获取锁,获取成功返回true,否则返回false,无论成不成功都不会阻塞

boolean tryLock();

tryLock(long time,TimeUnit unit) ,指定一段时间尝试获取锁,获取成功返回true,否则返回false,可以被Thread.interrupt()中断。

boolean tryLock(long time, TimeUnit unit) throws InterruptedException;

unlock() 释放锁

void unlock();

Condition newCondition(); 提供等待或者唤醒的多种方法,所有方法都要再当前线程获取了锁的前提下调用,否则抛出异常

    class MyCondition implements Condition{

        //休眠等待直到:single、interrupt
        @Override
        public void await() throws InterruptedException {
            // TODO Auto-generated method stub
            
        }

        //休眠等待直到:single
        @Override
        public void awaitUninterruptibly() {
            // TODO Auto-generated method stub
            
        }

        //休眠等待直到:single、interrupt、时间到
        //返回值 剩余的等待时间
        @Override
        public long awaitNanos(long nanosTimeout) throws InterruptedException {
            // TODO Auto-generated method stub
            return 0;
        }

        //休眠等待直到:single、interrupt、时间到
        @Override
        public boolean await(long time, TimeUnit unit) throws InterruptedException {
            // TODO Auto-generated method stub
            return false;
        }

        //休眠等待直到:single、interrupt、时间到
        @Override
        public boolean awaitUntil(Date deadline) throws InterruptedException {
            // TODO Auto-generated method stub
            return false;
        }

        //发出信号唤醒
        @Override
        public void signal() {
            // TODO Auto-generated method stub
            
        }
        
        //发出信号唤醒
        @Override
        public void signalAll() {
            // TODO Auto-generated method stub
            
        }
        
    }

 

posted @ 2018-01-04 15:28  shadow_demo  阅读(266)  评论(0)    收藏  举报