转:http://guoliangqi.iteye.com/blog/630086
线程池主类:
- import java.util.concurrent.LinkedBlockingQueue;
- import java.util.concurrent.ThreadPoolExecutor;
- import java.util.concurrent.TimeUnit;
- public class DataHandlerThreadPool {
- //核心线程数量,即初始化线程池的启动线程数量
- private static final int corePoolSize = 10;
- //最大线程数量
- private static final int maximumPoolSize = 20;
- //线程的存活时间,即完成任务后多久可再使用
- private static final int keepAliveTime = 300;
- //等待队列的长度
- private static final int workQueueSize = 30;
- private static ThreadPoolExecutor exec = null;
- public static ThreadPoolExecutor getDHThreadPool() {
- if (exec == null) {
- //ThreadPoolExceptionHandler表示当线程池处理不了规定任务时的异常处理方式。
- exec = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.MILLISECONDS,
- new LinkedBlockingQueue(workQueueSize), new ThreadPoolExceptionHandler());
- }
- return exec;
- }
- }
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class DataHandlerThreadPool {
//核心线程数量,即初始化线程池的启动线程数量
private static final int corePoolSize = 10;
//最大线程数量
private static final int maximumPoolSize = 20;
//线程的存活时间,即完成任务后多久可再使用
private static final int keepAliveTime = 300;
//等待队列的长度
private static final int workQueueSize = 30;
private static ThreadPoolExecutor exec = null;
public static ThreadPoolExecutor getDHThreadPool() {
if (exec == null) {
//ThreadPoolExceptionHandler表示当线程池处理不了规定任务时的异常处理方式。
exec = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue(workQueueSize), new ThreadPoolExceptionHandler());
}
return exec;
}
}
线程池异常处理类:
- import java.util.concurrent.RejectedExecutionHandler;
- import java.util.concurrent.ThreadPoolExecutor;
- public class ThreadPoolExceptionHandler implements RejectedExecutionHandler {
- public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
- System.out.println("线程池出现异常!");
- }
- }
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;
public class ThreadPoolExceptionHandler implements RejectedExecutionHandler {
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
System.out.println("线程池出现异常!");
}
}
任务实例,只需要实现Runnable接口就行
- public class ThreadPoolTask implements Runnable {
- public void run() {
- System.out.println("在这里执行业务逻辑和要执行的方法");
- }
- }
public class ThreadPoolTask implements Runnable {
public void run() {
System.out.println("在这里执行业务逻辑和要执行的方法");
}
}
执行测试类:
- import java.util.concurrent.ThreadPoolExecutor;
- public class TestMain {
- /**
- * @param args
- */
- public static void main(String[] args) {
- ThreadPoolExecutor executor = DataHandlerThreadPool.getDHThreadPool();
- //适当控制i的循环次数,可以看到打印出的信息,有的是执行业务逻辑,有的是在线程异常处理类里
- for (int i = 0; i < 100; i++) {
- executor.execute(new ThreadPoolTask());
- }
- }
- }
import java.util.concurrent.ThreadPoolExecutor;
public class TestMain {
/**
* @param args
*/
public static void main(String[] args) {
ThreadPoolExecutor executor = DataHandlerThreadPool.getDHThreadPool();
//适当控制i的循环次数,可以看到打印出的信息,有的是执行业务逻辑,有的是在线程异常处理类里
for (int i = 0; i < 100; i++) {
executor.execute(new ThreadPoolTask());
}
}
}
exec = new ThreadPoolExecutor(corePoolSize, maximumPoolSize,
keepAliveTime, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue(workQueueSize),
new ThreadPoolExceptionHandler());
实例化线程池的方法,在倒数第二个参数 new LinkedBlockingQueue(workQueueSize)可以设置等待队列的形式,有无限队列,有规定队列,有固定的数组等等。