protected final void setImpl(ThreadPoolConfig cfg) { if (cfg == null) { throw new IllegalArgumentException("config is null"); } cfg = cfg.copy(); final Queue<Runnable> queue = cfg.getQueue(); if ((queue == null || queue instanceof BlockingQueue) && (cfg.getCorePoolSize() < 0 || cfg.getCorePoolSize() == cfg.getMaxPoolSize())) { this.pool = cfg.getQueueLimit() < 0 ? new FixedThreadPool(cfg.getPoolName(), cfg.getMaxPoolSize(), (BlockingQueue<Runnable>) queue, cfg.getThreadFactory(), cfg.getMonitoringProbe()) : new QueueLimitedThreadPool( cfg.getPoolName(), cfg.getMaxPoolSize(), cfg.getQueueLimit(), cfg.getThreadFactory(), (BlockingQueue<Runnable>) queue, cfg.getMonitoringProbe()); } else { this.pool = new SyncThreadPool(cfg.getPoolName(), cfg.getCorePoolSize(), cfg.getMaxPoolSize(), cfg.getKeepAliveTime(TimeUnit.MILLISECONDS), TimeUnit.MILLISECONDS, cfg.getThreadFactory(), queue, cfg.getQueueLimit(),cfg.getMonitoringProbe()); } this.config = cfg.updateFrom(pool); }