为什么ReentrantLock方法没有抛出异常?

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()说抛异常要捕获,但我的可以运行

阅读 2.9k
2 个回答

请参考jdk文档:

clipboard.png

clipboard.png

lock没有抛异常,unlock有抛,但是却是checked exception,所以可以不必catch。但是对于lock和unlock间的代码,则建议加try..catch,因为这样才能保证一定不会漏掉unlock,所以下面的这种写法是推荐的:

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

lock和unlock方法并没有checked exception。

public void unlock() {
        sync.release(1);
    }
     public void lock() {
        sync.lock();
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题