要实现Java简单的线程池,可以采用ThreadPoolExecutor
类,它是Executor
的实现,可以通过构造函数来自定义线程池中线程的数量、队列的大小等参数。
下面是Java简单线程池实现的详细步骤:
1.创建ThreadPoolExecutor
int corePoolSize = 10;// 线程池核心线程数
int maximumpoolSize = 20;// 线程池最大线程数
long keepAliveTime = 60;// 线程池中超过corePoolSize数目的空闲线程最大存活时间;
TimeUnit unit = TimeUnit.SECONDS;// keepAliveTime的时间单位
BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(50);// 线程池阻塞队列
ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumpoolSize, keepAliveTime, unit, workQueue);
2.提交任务
使用execute(Runnable command)
方法提交一个任务。
executor.execute(new Runnable() {
@Override
public void run() {
// 此处为任务要执行的代码
}
});
3.关闭线程池
虽然Java线程池支持自动管理,但是在不需要时,我们应该手动关闭线程池。
executor.shutdown();
示例一
下面我们可以通过一个简单的示例,了解线程池的基本实现。
public class ThreadPoolExample {
public static void main(String[] args) {
int taskCount = 5;
int workerCount = 3;
ExecutorService executor = Executors.newFixedThreadPool(workerCount);
for(int i = 0; i < taskCount; i++) {
executor.submit(new Task(i));
}
executor.shutdown();
}
}
class Task implements Runnable {
private int taskId;
public Task(int taskId) {
this.taskId = taskId;
}
@Override
public void run() {
System.out.println("Task Id : " + this.taskId + " performed by " + Thread.currentThread().getName());
}
}
在这个示例中,我们创建了一个包含 5 条任务的线程池 executor
,最大并行执行线程数为 3。使用 executor.submit
方法将任务提交给线程池进行处理。
示例二
我们也可以通过自定义线程池实现,对线程池进一步掌握。
public class CustomThreadPoolExample {
// 自定义线程池
private static ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 10, 5L, TimeUnit.SECONDS,
new ArrayBlockingQueue<>(10));
public static void main(String[] args) {
int taskCount = 15;
for(int i = 0; i < taskCount; i++) {
executor.execute(new Task(i));
}
executor.shutdown();
}
}
class Task implements Runnable {
private int taskId;
public Task(int taskId) {
this.taskId = taskId;
}
@Override
public void run() {
System.out.println("Task Id : " + this.taskId + " performed by " + Thread.currentThread().getName());
}
}
在这个示例中,我们自定义了一个线程池 executor
,最大并行执行线程数为 10。使用 executor.execute
方法将任务提交给线程池进行处理。
以上是Java简单线程池的实现攻略,可根据实际需求进行灵活配置。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:实现java简单的线程池 - Python技术站