JDK自带线程池学习

本文介绍了一个具体的Java线程池实现案例,包括线程池主类的定义、异常处理类及任务实例。通过实例演示了如何配置线程池参数,并展示了如何通过执行测试类来验证线程池的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

转:http://guoliangqi.iteye.com/blog/630086

线程池主类:

Java代码 复制代码  收藏代码
  1. import java.util.concurrent.LinkedBlockingQueue;   
  2. import java.util.concurrent.ThreadPoolExecutor;   
  3. import java.util.concurrent.TimeUnit;   
  4.   
  5. public class DataHandlerThreadPool {   
  6.     //核心线程数量,即初始化线程池的启动线程数量   
  7.     private static final int corePoolSize = 10;   
  8.     //最大线程数量   
  9.     private static final int maximumPoolSize = 20;   
  10.     //线程的存活时间,即完成任务后多久可再使用   
  11.     private static final int keepAliveTime = 300;   
  12.     //等待队列的长度   
  13.     private static final int workQueueSize = 30;   
  14.     private static ThreadPoolExecutor exec = null;   
  15.   
  16.     public static ThreadPoolExecutor getDHThreadPool() {   
  17.         if (exec == null) {   
  18.             //ThreadPoolExceptionHandler表示当线程池处理不了规定任务时的异常处理方式。   
  19.             exec = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.MILLISECONDS,   
  20.                     new LinkedBlockingQueue(workQueueSize), new ThreadPoolExceptionHandler());   
  21.         }   
  22.         return exec;   
  23.     }   
  24.   
  25. }  
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;
    }

}

 

线程池异常处理类:

Java代码 复制代码  收藏代码
  1. import java.util.concurrent.RejectedExecutionHandler;   
  2. import java.util.concurrent.ThreadPoolExecutor;   
  3.   
  4. public class ThreadPoolExceptionHandler implements RejectedExecutionHandler {   
  5.   
  6.     public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {   
  7.   
  8.         System.out.println("线程池出现异常!");   
  9.   
  10.     }   
  11.   
  12. }  
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接口就行

Java代码 复制代码  收藏代码
  1. public class ThreadPoolTask implements Runnable {   
  2.   
  3.     public void run() {   
  4.         System.out.println("在这里执行业务逻辑和要执行的方法");   
  5.     }   
  6.   
  7. }  
public class ThreadPoolTask implements Runnable {

    public void run() {
        System.out.println("在这里执行业务逻辑和要执行的方法");
    }

}

 

执行测试类:

Java代码 复制代码  收藏代码
  1. import java.util.concurrent.ThreadPoolExecutor;   
  2.   
  3. public class TestMain {   
  4.   
  5.     /**  
  6.      * @param args  
  7.      */  
  8.     public static void main(String[] args) {   
  9.         ThreadPoolExecutor executor = DataHandlerThreadPool.getDHThreadPool();   
  10.         //适当控制i的循环次数,可以看到打印出的信息,有的是执行业务逻辑,有的是在线程异常处理类里   
  11.         for (int i = 0; i < 100; i++) {   
  12.             executor.execute(new ThreadPoolTask());   
  13.         }   
  14.     }   
  15. }  
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)可以设置等待队列的形式,有无限队列,有规定队列,有固定的数组等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值