`

ThreadPoolExecutor-实现自定义线程池

 
阅读更多

 

自定义连接池稍微麻烦些,不过通过创建的ThreadPoolExecutor线程池对象,可以获取到当前线程池的尺寸、正在执行任务的线程数、工作队列等等.

 

下面创建一个执行任务类继承至Thread类,也可以实现Runnable接口,效果一样.

package pack.java.custom;
/**
 * 执行任务;
 * @author zhouhaitao
 * 2012-4-11
 */
public class RunnableTask extends Thread{
	//线程数;
	private int i = 0;

	public RunnableTask(){
		super();
	}

	public RunnableTask(int num){
		i = num ;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i =0;i<3;i++){
			System.out.println(i);
		}
		System.out.println("线程"+i+"执行完成.");
	}
}

 

 

创建一个测试自定义线程池的类,具体代码如下:

package pack.java.custom;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 自定义线程池;
 * @author zhouhaitao
 * 2012-4-11
 */
public class CustomThreadPool {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//创建等待队列;
		BlockingQueue<Runnable> blockingQueue = new ArrayBlockingQueue<Runnable>(20);
		
		//创建一个单线程执行程序,它可以安排在指定的时间执行或者定期执行;
		ThreadPoolExecutor pool = new ThreadPoolExecutor(3, 5, 2, TimeUnit.MILLISECONDS, blockingQueue);
		Thread thread1 = new RunnableTask(1);
		Thread thread2 = new RunnableTask(2);
		Thread thread3 = new RunnableTask(3);
		pool.execute(thread1);
		pool.execute(thread2);
		pool.execute(thread3);
		
		//关闭线程池;
		pool.shutdown();
	}
}

 

 

执行结果:

----------------------------------------------------------------------------------------------------------------------------

0
1
2
线程1执行完成.
0
1
2
线程3执行完成.
0
1
2
线程2执行完成.

 

ThreadPoolExecutor构造方法参数介绍:


public ThreadPoolExecutor(int corePoolSize,  
                          int maximumPoolSize,  
                          long keepAliveTime,  
                          TimeUnit unit,  
                          BlockingQueue<Runnable> workQueue)
用给定的初始参数和默认的线程工厂及处理程序创建新的 ThreadPoolExecutor。
使用 Executors 工厂方法之一比使用此通用构造方法方便得多。 

 
参数:   
corePoolSize - 池中所保存的线程数,包括空闲线程。   
maximumPoolSize - 池中允许的最大线程数。   
keepAliveTime - 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间。   
unit - keepAliveTime 参数的时间单位。   
workQueue - 执行前用于保持任务的队列。此队列仅保持由 execute 方法提交的 Runnable 任务。   
抛出:   
IllegalArgumentException - 如果 corePoolSize 或 keepAliveTime 小于零,
或者 maximumPoolSize 小于或等于零,或者 corePoolSize 大于 maximumPoolSize。   
NullPointerException - 如果 workQueue 为 null 

 

 

引用:

http://longzhun.iteye.com/blog/1404836

分享到:
评论

相关推荐

    自定义实现Java线程池1-模拟jdk线程池执行流程1

    【自定义Java线程池实现】 在Java编程中,线程池是一种高效管理线程资源的方式,可以提高系统的性能和响应速度。本篇将探讨如何模拟Java的JDK线程池执行流程,以理解其设计原理。核心知识点包括线程池的执行策略、...

    Spring Boot利用@Async如何实现异步调用:自定义线程池

    Spring Boot利用@Async实现异步调用:自定义线程池 Spring Boot是一个流行的Java框架,它提供了许多实用的特性来简化应用程序的开发。其中,异步调用是Spring Boot中的一个重要特性,它允许开发者将一些耗时的任务...

    自定义实现Java线程池

    #### 三、自定义线程池设计 基于`Executor`接口,我们可以实现一个简单的线程池。首先,定义必要的属性: - `wc`: 当前线程数量。 - `coreThreadPool`: 核心线程数。 - `maxThreadPool`: 最大线程数。 - `...

    笔记-6、线程池1

    自定义线程池需要实现`java.util.concurrent.Executor`接口,该接口定义了一个`execute`方法用于执行Runnable任务。我们可以扩展`java.util.concurrent.ThreadPoolExecutor`类,它提供了更复杂的线程池管理功能,...

    安卓开发框架工具类相关-工具类线程池日志自定义的控件程序崩溃捕捉处.rar

    Java中的ExecutorService和ThreadPoolExecutor可以创建线程池,通过合理调度任务,避免过多线程导致资源浪费和系统不稳定。使用线程池可以控制并发数量,优化内存管理,提高性能。 3. **日志(Log)**: 日志是...

    java多线程学习笔记之自定义线程池

    本篇文章主要介绍了Java多线程学习笔记之自定义线程池,通过深入了解ThreadPoolExecutor这个核心类,我们可以自定义线程池,满足不同的线程池需求。 Java多线程学习笔记之自定义线程池的重要性在于,它可以根据不同...

    JAVA 自定义线程池的最大线程数设置方法

    JAVA 自定义线程池的最大线程数设置方法 JAVA 自定义线程池的最大线程数设置方法是指在创建线程池时,设置线程池的最大线程数,以确保线程池的高效运行。线程池的最大线程数设置方法主要取决于任务的类型,即CPU...

    Android编程自定义线程池与用法示例

    Android编程自定义线程池与用法示例 Android编程自定义线程池与用法示例主要介绍了Android编程自定义线程池与用法,结合实例形式分析了Android线程池的功能、定义及简单使用方法。下面将详细说明标题和描述中所说的...

    JAVA经典线程池源码

    通过深入研究和使用本资源提供的"JAVA经典线程池源码",开发者不仅可以理解线程池的基本工作原理,还能学习到如何自定义线程池以适应特定场景,从而提高程序的并发性能和稳定性。在实际项目中,结合Java并发API的...

    Java 线程池的原理与实现

    `ThreadPoolExecutor`允许自定义线程池的核心参数,如核心线程数、最大线程数、线程存活时间、任务队列类型等。 - **固定线程池**:`Executors.newFixedThreadPool(int nThreads)`,创建一个固定大小的线程池,线程...

    使用Vector实现简单线程池

    然而,如果我们想要从头开始理解线程池的工作原理,或者在特定场景下自定义线程池的行为,那么使用`Vector`来实现简单的线程池是一个很好的学习实践。 标题"使用Vector实现简单线程池"指的是将Java中的`Vector`类...

    spring boot使用自定义配置的线程池执行Async异步任务

    一、自定义线程池配置类 在 Spring Boot 中,我们可以使用 `@ConfigurationProperties` 注解来定义自定义的配置类。例如,我们可以创建一个 `TaskThreadPoolConfig` 类,如下所示: ```java package ...

    Java版线程池实现

    这个自定义线程池的实现包括以下几个关键组件: 1. **线程池参数**: - `reserve`:保留线程数,这些线程不处理任务,但保持就绪状态,以防突然的任务激增。 - `minPools`:最小连接池数目,也是预启动的线程数。...

    Java、Android多线程、线程池Demo

    ThreadPoolExecutor允许我们自定义线程池的核心参数,如核心线程数、最大线程数、线程空闲时间以及工作队列等。这些参数的选择直接影响线程池的工作效率和稳定性。 在Android中,由于其运行环境的特殊性,主线程...

    ScalableCustomThreadPool:该示例将有助于创建具有可伸缩性功能的自定义线程池

    "ScalableCustomThreadPool-master"可能包含了一个自定义线程池的实现,该实现可能包括了以上所述的可伸缩性和自定义特性。源代码分析可以帮助理解如何在实际项目中创建和管理这样的线程池,以优化并发性能。 总的...

    Java实现的线程池、消息队列功能

    在实际应用中,根据业务需求,我们可以自定义线程池配置,如设置合适的线程数量和队列大小,以优化系统的资源利用率和性能。同时,消息队列的使用可以改善系统的吞吐量和可靠性,提高系统的整体效率。 关于“工具”...

    线程池的简单实现

    在Java中,`java.util.concurrent`包提供了`ExecutorService`接口和`ThreadPoolExecutor`类,它们为实现线程池提供了标准的API。`ThreadPoolExecutor`允许我们自定义核心线程数、最大线程数、任务队列以及线程存活...

    JAVA使用线程池查询大批量数据

    最常见的实现是`ThreadPoolExecutor`,它允许我们自定义线程池的核心参数,如核心线程数、最大线程数、线程存活时间等。使用线程池查询大批量数据的基本步骤如下: 1. **创建线程池**:首先,我们需要创建一个...

Global site tag (gtag.js) - Google Analytics