美文网首页
Java中Lock的用法

Java中Lock的用法

作者: cbhe | 来源:发表于2020-05-25 18:32 被阅读0次

    本文简单介绍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 的代码
    }
    

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

    相关文章

      网友评论

          本文标题:Java中Lock的用法

          本文链接:https://www.haomeiwen.com/subject/devyahtx.html