LockSupport和淘宝面试题与源码阅读方法论
package com.lock;
import java.util.concurrent.TimeUnit;
public class LockSupport {
public static void main(String[] args) {
Thread t=new Thread(()->{
for (int i = 0; i <10 ; i++) {
System.out.println(i);
//到这很简单的一个线程
//循环十次 每次秒输出一个数 一直到9
//接下来给这个线程加上一个LockSupport锁
if (i==5){
//使用park()方法阻塞当前线程t 此时运行结果到五就停了
java.util.concurrent.locks.LockSupport.park();
}
//实验 unpark可以两次吗? 答案是可以
if (i==7){
//使用park()方法阻塞当前线程t 此时运行结果到7就停了
java.util.concurrent.locks.LockSupport.park();
}
try {
//加上一个停顿 每一秒停顿
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
//执行线程
t.start();
//执行unpark 此时这个unpark和start是在主线程同时执行的
java.util.concurrent.locks.LockSupport.unpark(t);
java.util.concurrent.locks.LockSupport.unpark(t);
//这里做了个小拓展 让这个阻塞停止八秒后再唤醒
try {
TimeUnit.SECONDS.sleep(8);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("after 8 senconds");
java.util.concurrent.locks.LockSupport.unpark(t);
}
}