鍍金池/ 問(wèn)答/Java  Linux/ 為什么ReentrantLock方法沒(méi)有拋出異常?

為什么ReentrantLock方法沒(méi)有拋出異常?

package com.example.demo;

import java.util.concurrent.locks.ReentrantLock;

public class Task implements Runnable {
    ReentrantLock lock;
    int i = 0;

    public Task(ReentrantLock lock) {
        this.lock = lock;
    }


    @Override
    public void run() {
        for (int j = 0; j < 10000; j++) {
            lock.lock();
            i++;
             lock.unlock();
            System.out.println(Thread.currentThread() + " : " + i);

        }
    }

    public static void main(String[] args) {
        ReentrantLock lock = new ReentrantLock();
        Task task = new Task(lock);
        for (int i = 0; i < 100; i++) {
            Thread thread = new Thread(task);
            thread.start();

        }


    }
}

書上面是lock() unlock()說(shuō)拋異常要捕獲,但我的可以運(yùn)行

回答
編輯回答
柚稚

lock和unlock方法并沒(méi)有checked exception。

public void unlock() {
        sync.release(1);
    }
     public void lock() {
        sync.lock();
    }
2017年10月30日 21:33
編輯回答
不討喜

請(qǐng)參考jdk文檔:

clipboard.png

clipboard.png

lock沒(méi)有拋異常,unlock有拋,但是卻是checked exception,所以可以不必catch。但是對(duì)于lock和unlock間的代碼,則建議加try..catch,因?yàn)檫@樣才能保證一定不會(huì)漏掉unlock,所以下面的這種寫法是推薦的:

lock.lock();
try {
    xxx;
} finally {
    lock.unlock();
}

2017年11月11日 02:59