废话不多说,直接上代码,如下
package com.nj.nfhy.test;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;
public class TestHandlerThreadFactory implements ThreadFactory {
private static final AtomicInteger poolNumber = new AtomicInteger(1);
private final ThreadGroup group;
private final AtomicInteger threadNumber = new AtomicInteger(1);
private final String namePrefix;
public TestHandlerThreadFactory() {
SecurityManager s = System.getSecurityManager();
group = (s != null) ? s.getThreadGroup() :
Thread.currentThread().getThreadGroup();
namePrefix = "test-handler-pool-" +
poolNumber.getAndIncrement() +
"-thread-";
}
public Thread newThread(Runnable r) {
Thread t = new Thread(group, r,
namePrefix + threadNumber.getAndIncrement(),
0);
if (t.isDaemon())
t.setDaemon(false);
if (t.getPriority() != Thread.NORM_PRIORITY)
t.setPriority(Thread.NORM_PRIORITY);
return t;
}
}
package com.nj.nfhy.test;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
public class TestThreadPool {
//线程数
public static final int poolSize = 3;
public static final ThreadPoolExecutor testThreadPool = (ThreadPoolExecutor) Executors.newFixedThreadPool(poolSize, new TestHandlerThreadFactory());
}
package com.nj.nfhy.test;
import java.sql.Timestamp;
public class Test {
public static void main(String[] argv){
while ( TestThreadPool.testThreadPool.getActiveCount() > TestThreadPool.poolSize){
//当前正在运行的线程数超出了上限,终止
return;
}
TestRunnable runJob = new TestRunnable(1,"jobKey",new Timestamp(System.currentTimeMillis()));
TestThreadPool.testThreadPool.execute(runJob);
}
static class TestRunnable implements Runnable {
private long authId;
private String jobKey;
private Timestamp jobTime;
public TestRunnable(long authId, String jobKey, Timestamp jobTime) {
this.authId = authId;
this.jobKey = jobKey;
this.jobTime = jobTime;
}
@Override
public void run() {
System.out.println(authId + jobKey + jobTime);
}
}
}