package io.github.xuse.test;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import org.junit.Test;

public class ThreadPoolTest {
	@Test
	public void test1() throws InterruptedException {
		ExecutorService executor = new ThreadPoolExecutor(2, 10, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
		final CountDownLatch counter=new CountDownLatch(10); 
		for (int i = 0; i < 10; i++) {
			final int id = i;
			executor.execute(new Runnable() {
				public void run() {
					System.out.println(id + "号线程开始工作");
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
					}
					counter.countDown();
				}
			});
		}
		counter.await();

	}
}

package io.github.xuse.test;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import jef.common.log.LogUtil;
import jef.tools.ResourceUtils;

import org.junit.Test;

public class ThreadPoolTest {
	@Test
	public void test1() throws InterruptedException {
		ExecutorService executor = new ThreadPoolExecutor(2, 10, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
		final CountDownLatch counter=new CountDownLatch(10); 
		for (int i = 0; i < 10; i++) {
			final int id = i;
			executor.execute(new Runnable() {
				public void run() {
					System.out.println(id + "号线程开始工作");
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
					}
					counter.countDown();
				}
			});
		}
		counter.await();

	}
	
}

Modify version of druid.