import java.util.concurrent.locks.ReentrantLock;
/**
* ReentrantLock 测试用代码
*
* @author TF12778 2019/10/21 15:30
*/
public class ReentrantLockTest extends Thread {
private static int count = 100000;// 10000000;
public static ReentrantLock lock = new ReentrantLock();
public static int i = 0;
public ReentrantLockTest(String name) {
super.setName(name);
}
/**
* 1。 当使用ReentrantLock锁的时候,不论任何时候,输出结果都是200000
* 2。 当不使用ReentrantLock锁的时候,输出结果可能不等于200000,刚刚测试了一把是199988
*/
@Override
public void run() {
for (int j = 0; j < count; j++) {
lock.lock();
try {
System.out.println(this.getName() + " " + i);
i++;
} finally {
lock.unlock();
}
}
}
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
ReentrantLockTest test1 = new ReentrantLockTest("thread1");
ReentrantLockTest test2 = new ReentrantLockTest("thread2");
test1.start();
test2.start();
test1.join(); // 先执行子线程,再执行主线程
test2.join(); // 先执行子线程,再执行主线程
System.out.println("最后的执行结果:" + i); // 执行主线程
}
}