java 线程池 任务队列_Java并发编程线程池任务队列

类ThreadPoolExecutor最常使用的构造方法是:

ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueueworkQueue)

参数解释如下:corePoolSize:池中所保存的线程数,包括空闲线程,也就是核心池的大小。

maximumPoolSize:池中允许的最大线程数。

keepAliveTime:当线程数量大于corePoolSize值时,在没有超过指定的时间内是不从线程池中将空闲线程删除的,如果超过此时间单位,则删除。

unit:keepAliveTime参数的时间单位。

workQueue:执行前用于保持任务的队列。此队列仅保持由execute方法提交的Runnable任务。

其中workQueue参数的解释对吗?我运行下面的例子发现submit提交的Callable任务一样会占用workQueue,书上错了吗public class Main {

static class MyCallable implements Callable {

private int age;

public MyCallable(int age) {

super();

this.age = age;

}

public String call() throws Exception {

Thread.sleep(1000);

System.out.println("年龄是:" + age);

return "返回值 年龄是:" + age;

}

}

public static void main(String[] args) throws InterruptedException {

ThreadPoolExecutor executor = new ThreadPoolExecutor(7, 8, 5, TimeUnit.SECONDS, new LinkedBlockingDeque<>(1));

executor.submit(new MyCallable(1));// 1

executor.submit(new MyCallable(2));// 2

executor.submit(new MyCallable(3));// 3

executor.submit(new MyCallable(4));// 4

executor.submit(new MyCallable(5));// 5

executor.submit(new MyCallable(6));// 6

executor.submit(new MyCallable(7));// 7

executor.submit(new MyCallable(8));// 8

executor.submit(new MyCallable(9));// 9

// executor.submit(new MyCallable(10));// 10

Thread.sleep(300);

System.out.println("A:" + executor.getCorePoolSize());

System.out.println("A:" + executor.getPoolSize());

System.out.println("A:" + executor.getQueue().size());

Thread.sleep(5000);

System.out.println("B:" + executor.getCorePoolSize());

System.out.println("B:" + executor.getPoolSize());

System.out.println("B:" + executor.getQueue().size());

executor.shutdown();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值