JDK自带线程池学习

线程池主类:

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("线程池出现异常!");

    }

}
 

任务实例,只需要实现Runnable接口就行

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());
        }
    }
}
 

exec = new ThreadPoolExecutor(corePoolSize, maximumPoolSize,
keepAliveTime, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue(workQueueSize),
new ThreadPoolExceptionHandler());

实例化线程池的方法,在倒数第二个参数 new LinkedBlockingQueue(workQueueSize)可以设置等待队列的形式,有无限队列,有规定队列,有固定的数组等等。

 

 

 

你可能感兴趣的:(java,jdk)