java 自定义线程池_java如何自定义一个线程池

本文介绍了一个自定义线程池`MyExecutorService`的实现,包括初始化线程、执行任务列表、线程执行状态管理和关闭线程池的方法。线程池使用`LinkedBlockingDeque`作为阻塞队列,并通过`InitThread`类处理任务执行。示例代码展示了如何创建和使用该线程池执行任务。
摘要由CSDN通过智能技术生成

packagecom.rbac.thread;importjava.util.ArrayList;importjava.util.List;importjava.util.concurrent.BlockingQueue;importjava.util.concurrent.LinkedBlockingDeque;importjava.util.concurrent.TimeUnit;/*** 自定义线程池

*

*@authorxl,lang

**/

public classMyExecutorService {//初始化线程

protected ListinitThreads;//执行任务列表

protected BlockingQueuetaskQueues;//线程执行状态

protected volatile boolean threadState = true;/** // 当前线程的活跃数 public AtomicInteger activeCount; public Lock lock=new

* ReentrantLock(); // 最小活跃数 public int threadMinSize = 0; // 最大线程数 public

* int threadMaxSize = 0; // 初始话线程数 public int threadInitSize = 0;*/

/*** 线程初始化方法

*

*@paramthreadMaxSize

*@paramthreadInitSize

*@paramtaskQueueSize*/

/** public MyExecutorService(int threadMaxSize, int threadMinSize, int

* threadInitSize, int taskQueueSize) { this.taskQueues = new

* LinkedBlockingDeque(taskQueueSize); if (threadInitSize > 0 &&

* threadInitSize < threadMaxSize) { this.initThreads = new ArrayList<>();

* for (int i = 0; i < threadInitSize; i++) { InitThread init = new

* InitThread(); init.start(); initThreads.add(init); }

*

* }

*

* }*/

/*** 线程初始化方法

*

*@paramthreadMaxSize

*@paramthreadInitSize

*@paramtaskQueueSize*/

public MyExecutorService(int threadInitSize, inttaskQueueSize) {this.taskQueues = new LinkedBlockingDeque(taskQueueSize);if (threadInitSize > 0) {this.initThreads = new ArrayList<>();for (int i = 0; i < threadInitSize; i++) {

InitThread init= newInitThread();

init.start();

initThreads.add(init);

}

}

}//添加任务

public boolean exeute(Runnable task) throwsInterruptedException {return this.taskQueues.offer(task, 60, TimeUnit.SECONDS);

}/*** 初始化线程

*

*@authorxl,lang

**/

class InitThread extendsThread {

@Overridepublic voidrun() {while (threadState || taskQueues.size() > 0) {

Runnable runable=taskQueues.poll();if (null !=runable) {

runable.run();

}

}

}

}//关闭线程池

public voidshutdown() {this.threadState = false;

}public static voidmain(String[] args) {

MyExecutorService es= new MyExecutorService(2, 5);for (int i = 0; i < 100; i++) {final int a =i;try{

es.exeute(newRunnable() {

@Overridepublic voidrun() {

System.out.println(Thread.currentThread().getName()+ "执行" +a);

}

});

}catch(InterruptedException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

es.shutdown();

}

}

Java可以通过自定义线程池来管理线程的执行。可以使用@Async注解来指定线程池,如在@Component注解使用@Async("taskExecutor")来指定线程池的名称为"taskExecutor"。\[1\]另外,还可以通过实现Callable接口并重写call()方法,然后使用FutureTask来获取线程的执行结果。\[2\]在线程池的使用方面,可以使用ExecutorService接口来创建线程池,例如使用Executors.newFixedThreadPool(3)来创建一个固定大小为3的线程池。\[3\]最后,记得在使用完线程池后调用shutdown()方法来关闭线程池。 #### 引用[.reference_title] - *1* [java自定义线程池总结](https://blog.csdn.net/qq_21225505/article/details/125092169)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Java自定义线程池](https://blog.csdn.net/HcJsJqJSSM/article/details/123033019)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Java创建线程池三种方式及自定义线程池](https://blog.csdn.net/Luck_ZZ/article/details/101057124)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值