juc学习之BlockingQueue

101 阅读1分钟
  • 关于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(;;){//spin 自旋
                        System.out.println("准备park住当前线程:" + current.getName());
                        LockSupport.park(object);
                        //或者使用LockSupport.park(); 效果是一样的,没什么区别
                        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