- 关于
LockSupport的两个park()方法的一个注意点:会根据当前线程是否有中断标记来判断是否进行中断,如果有中断标记,则不会被阻塞住;没有中断标记才会被阻塞住。
测试代码如下:
package concurrent.juc;
import java.util.concurrent.locks.LockSupport;
public class ParkTest01 {
static Object object=new Object();
public static void main(String[] args) {
Thread t0 = new Thread(new Runnable() {
@Override
public void run() {
Thread current = Thread.currentThread();
System.out.println(current.getName()+"开始执行");
for(;;){
System.out.println("准备park住当前线程:" + current.getName());
LockSupport.park(object);
System.out.println(Thread.interrupted());
System.out.println("当前线程" + current.getName() + "已经被唤醒....");
}
}
},"t0");
t0.start();
try {
Thread.sleep(2000);
System.out.println("准备唤醒" + t0.getName() + "{}线程!");
LockSupport.unpark(t0);
Thread.sleep(2000);
t0.interrupt();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
为什么要有BlockingQueue?