我们之前使用synchronized来实现同步,现在导包 java.util.concurrent.locks,就可以完成同步。不过需要获取锁,释放锁。同步的内容要写进try里。
开始写这段代码时,我将Lock l = new ReentrantLock(); // 创建锁对象写到run方法里了,这就导致每当线程开始跑时就会创建一个锁对象,就会通过新的锁来实现线程,那么就实现不了同步。
import java.util.concurrent.locks.*;
class Xian implements Runnable {
int num = 10000;
Lock l = new ReentrantLock(); // 创建锁对象
public void run() {
while (true) {
l.lock();// 获取锁
try {
if (num > 0) {
System.out.println(Thread.currentThread().getName() + "---" + num);
num--;
}
} finally {
l.unlock();// 释放锁
}
}
}
}
class Demo1 {
public static void main(String[] args) {
Xian x = new Xian();
Thread t = new Thread(x);
Thread t2 = new Thread(x);
t.start();
t2.start();
}
}