一 代码
package com.mashibing.juc.c_020;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.LockSupport;
public class T13_TestLockSupport {
public static void main(String[] args) {
Thread t = new Thread(() -> {
for (int i = 0; i < 10; i++) {
System.out.println(i);
if (i == 5) {
LockSupport.park(); // 当前线程停(阻塞)在这里,当其他位置执行 LockSupport.unpark(t); 时,当前线程继续往下跑
}
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t.start();
// // 版本一:不等待8秒,调用 unpark()
// // t 线程即使有 park,t 线程也不会阻塞,还是放行
// LockSupport.unpark(t);
// // 版本二:等待8秒,调用 unpark()
// try {
// TimeUnit.SECONDS.sleep(8);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// System.out.println("after 8 senconds!");
// // t 线程,别停(阻塞)了,可以走了
// LockSupport.unpark(t);
}
}
二 测试
1 版本一的测试结果
0
1
2
3
4
5
6
7
8
9
2 版本二的测试结果
0
1
2
3
4
5
after 8 senconds!
6
7
8
9
三 说明
版本一:提前就有通行证(LockSupport.unpark(t)),遇到警察不用停。
版本二:没有通行证,遇到警察必须停,拿到通信证(LockSupport.unpark(t)),才能走。