深入分析线程池(三)—补充

3中队列WorkQueue结合Max的效果:


可以看得出,ArrayBlockingQueue内部是Lock锁机制

如果LinkedBlockingDeque有指定带参构造的话,那么跟之前的无参构造就不一样的,无参构造的一般把该队列看成无界的。

public static void main(String[] args) {
        LinkedBlockingDeque link = new LinkedBlockingDeque<Runnable>(2);
        ThreadPoolExecutor pool = new ThreadPoolExecutor(2,3,5,
                TimeUnit.SECONDS, link);
        pool.execute(new Runnable());
        ...
    }
//   假如5个任务,则放入队列的有2个任务,执行3个任务
//   假如6个任务,则有一个任务会被拒绝执行
当然了, LinkedBlockingQueue使用无参构造的话,那么max将直接忽略,相当于Integer.Max_Value。
ArrayBlockingQueue是带参构造的,道理一样。
SynchronousQueue则可以想象一个都不放在队列里。

猜你喜欢

转载自blog.csdn.net/jae_wang/article/details/80084760