Java中Lock的用法

2020-05-25  本文已影响0人  cbhe

本文简单介绍Java并发包中最常用的ReentrantLock的用法。在Lock之前,程序员一般采用synchronized搭配wait、notify、notifyAll来完成线程互斥与同步。
ReentrantLock 和 Condition 配合的基本用法如下:

class LockSample{
   
    private final Lock lock = new ReentrantLock();
    private final Condition condition = lock.newCondition();
    
    void testMethod(){
        
        lock.lock();
        try {

            while (!check()){
                condition.await();
            }

            doSomething();
            condition.signalAll(); // signal()

        } catch (InterruptedException e) {
            handleException(e);
        } finally {
            lock.unlock();
        }
    }

     // 省略了 check() 和 handleException(Excetption e) 的代码 
}

而对应于Object方法的 wait、notify / notifyAll 方法的基本用法如下:

class LockSample{
    
    void testMethod(){

        synchronized(this) {
            try {

                while (!check()) {
                    wait();
                }

                doSomething();
                notifyAll(); // notify()

            } catch (InterruptedException e){
                handleException(e);
            }
        }
    }
    
    // 省略了check 和 handleException 的代码
}

可以看出这两种锁模式的用法还是有非常共通之处的。

上一篇下一篇

猜你喜欢

热点阅读