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()说抛异常要捕获,但我的可以运行
请参考jdk文档:
lock没有抛异常,unlock有抛,但是却是checked exception,所以可以不必catch。但是对于lock和unlock间的代码,则建议加try..catch,因为这样才能保证一定不会漏掉unlock,所以下面的这种写法是推荐的: