`
dwj147258
  • 浏览: 191948 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

线程池创建ThreadPoolExecutor

阅读更多

  先贴出一个创建线程池的实例:

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ThreadPoolDemo {
	private ThreadPoolExecutor threadPool = null ;
	
	public ThreadPoolDemo(){
		threadPool = new ThreadPoolExecutor(5, 
				10, 
				30, 
				TimeUnit.SECONDS,
				new LinkedBlockingQueue<Runnable>() ,
				new ThreadNameFactory("myThread", false) , 
				new MyAbortPolicy("ThreadName")) ;
	}
}

 

import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;

public class ThreadNameFactory implements ThreadFactory{
	private static AtomicInteger curThre = new AtomicInteger(1) ;
	
	private  AtomicInteger threadNum = new AtomicInteger(1);
	
	private String namePre ; 
	
	private boolean isW  ;
	
	private final ThreadGroup mGroup;
	
	public ThreadNameFactory(String namePre , boolean isW){
		this.namePre = namePre +"-"+curThre.getAndIncrement() ;
		this.isW = isW ; 
		SecurityManager sys = System.getSecurityManager() ;
		mGroup = ( sys == null ) ? Thread.currentThread().getThreadGroup() : sys.getThreadGroup();
 	}
	@Override
	public Thread newThread(Runnable arg0) {
		Thread thread = new Thread(mGroup , this.namePre+"-"+threadNum.getAndIncrement() );
		thread.setDaemon(isW);
		return thread;
	}
}

 

import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor.AbortPolicy;

public class MyAbortPolicy extends AbortPolicy{
	private String runName ; 
	
	public MyAbortPolicy(String runName){
		this.runName = runName ;
	}
	@Override
    public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
    	String msg = String.format("Thread pool is EXHAUSTED!" +
                " Thread Name: %s, Pool Size: %d (active: %d, core: %d, max: %d, largest: %d), Task: %d (completed: %d)," +
                " Executor status:(isShutdown:%s, isTerminated:%s, isTerminating:%s)" ,
                runName, e.getPoolSize(), e.getActiveCount(), e.getCorePoolSize(), e.getMaximumPoolSize(), e.getLargestPoolSize(),
                e.getTaskCount(), e.getCompletedTaskCount(), e.isShutdown(), e.isTerminated(), e.isTerminating());
        throw new RejectedExecutionException(msg);
        
    }
}

 

 

构造方法:

public ThreadPoolExecutor(int corePoolSize,  
                          int maximumPoolSize,  
                          long keepAliveTime,  
                          TimeUnit unit,  
                          BlockingQueue<Runnable> workQueue,  
                          ThreadFactory threadFactory ,

                          RejectedExecutionHandler handler) {  
    this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,  
         Executors.defaultThreadFactory(), handler);  
} 

 

参数解释:

 

corePoolSize:         核心线程数,会一直存活,即使没有任务,线程池也会维护线程的最少数量
maximumPoolSize: 线程池维护线程的最大数量
keepAliveTime:      线程池维护线程所允许的空闲时间,当线程空闲时间达到keepAliveTime,该线程会退出,直到线程数量等于corePoolSize。如果allowCoreThreadTimeout设置为true,则所有线程均会退出直到线程数量为0。
unit:线程池维护线程所允许的空闲时间的单位、可选参数值为:TimeUnit中的几个静态属性:NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS。
workQueue:线程池所使用的缓冲队列,常用的是:java.util.concurrent.ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue
handler:线程池中的数量大于maximumPoolSize,对拒绝任务的处理策略,默认值ThreadPoolExecutor.AbortPolicy()。

threadFactory :线程生成工厂

 

分享到:
评论

相关推荐

    线程池之ThreadPoolExecutor.docx

    创建线程池使用`ThreadPoolExecutor`构造函数,其参数含义如下: - `corePoolSize`: 核心线程数,表示线程池中保持的最小线程数。 - `maximumPoolSize`: 最大线程数,定义了线程池允许的最大并发线程数。 - `...

    java 线程池例子ThreadPoolExecutor

    1. 创建线程池:创建一个 ThreadPoolExecutor 实例,并设置其核心参数,例如 corePoolSize、maxPoolSize 和 keep-alive time。 2. 提交任务:提交一个任务给线程池,任务将被加入到线程池的队列中。 3. 执行任务:当...

    Java线程池与ThreadPoolExecutor.pdf

    线程池通过ThreadPoolExecutor类实现,这是一个高度可配置的工具,能够根据具体需求定制线程的创建、管理和销毁策略。 ThreadPoolExecutor的核心参数包括: 1. corePoolSize:核心线程数,这是线程池在非繁忙状态下...

    Python线程池模块ThreadPoolExecutor用法分析

    Python线程池模块`ThreadPoolExecutor`是Python标准库`concurrent.futures`的一部分,它提供了一种方便且高效的方式来管理线程,以便并发地执行多个任务。线程池的概念允许我们预先创建一组线程,然后根据需要分配...

    java线程池ThreadPoolExecutor类使用详解.docx

    而线程池不允许使用Executors去创建,而要通过ThreadPoolExecutor方式,这一方面是由于jdk中Executor框架虽然提供了如newFixedThreadPool()、newSingleThreadExecutor()、newCachedThreadPool()等创建线程池的方法,...

    线程池ThreadPoolExecutor原理源码分析.md

    ### 线程池 `ThreadPoolExecutor` 原理源码分析 #### 一、概述 线程池作为 Java 并发编程中的重要组件,在实际应用中被广泛使用。其核心类 `ThreadPoolExecutor` 实现了对线程的管理、调度等功能。本文将围绕 `...

    使用线程池ThreadPoolExecutor 抓取论坛帖子列表

    线程池是由一组预先创建的线程组成的,这些线程可以复用,而不是每次执行任务时都创建新的线程。`ThreadPoolExecutor`是Java并发包`java.util.concurrent`中的核心类,用于实现线程池服务。通过设置线程池参数,我们...

    11-线程池ThreadPoolExecutor底层原理源码分析(上)-周瑜.pdf

    `ThreadPoolExecutor`是Java中非常重要的一个类,它用于创建线程池。线程池可以重用一组预先创建好的线程来执行任务,从而减少了创建和销毁线程所带来的开销,同时也能够控制运行的线程数量,避免由于过多的线程导致...

    java线程池对象ThreadPoolExecutor的深入讲解

    Java线程池是一种高效管理线程资源的工具,它的核心组件是`ThreadPoolExecutor`类,它在Java的`java.util.concurrent`包中。线程池的使用能够显著提高应用程序的性能和响应速度,同时减少系统资源的浪费。下面将详细...

    12-线程池ThreadPoolExecutor底层原理源码分析(下)-周瑜.pdf

    `ThreadPoolExecutor`是Java中用于创建和管理线程池的重要类。它提供了许多核心属性和方法来控制线程池的行为。 #### 1.1 `ctl`变量 线程池内部维护了一个`AtomicInteger`类型的变量`ctl`,该变量用于表示线程池的...

    线程池ThreadPoolExecutor使用简介与方法实例

    如果线程池中的线程数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,那么ThreadPoolExecutor会创建新的线程来处理任务。如果线程池中的线程数量大于corePoolSize,缓冲队列...

    spring线程池ThreadPoolExecutor配置以及FutureTask的使用

    这个类是Spring对Java内置的`java.util.concurrent.ThreadPoolExecutor`的封装,允许开发者在Spring应用上下文中声明式地定义线程池。在本篇文章中,我们将深入探讨`ThreadPoolTaskExecutor`的配置及其使用,并结合`...

    JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用

    使用ThreadPoolExecutor类可以创建一个线程池,线程池可以维护一定数量的线程,用于执行任务。任务可以通过execute(Runnable)方法被添加到线程池,任务就是一个Runnable类型的对象,任务的执行方法就是Runnable类型...

    Java线程池ThreadPoolExecutor原理及使用实例

    Java线程池ThreadPoolExecutor原理及使用实例 Java线程池ThreadPoolExecutor是Java并发编程中的一种基本机制,主要用于管理和执行任务的线程池。下面对其原理和使用实例进行详细介绍。 线程池概述 线程池是一个...

    Spring线程池ThreadPoolExecutor配置并且得到任务执行的结果

    ThreadPoolExecutor是Java中的一种线程池实现,它可以帮助我们管理线程资源,避免创建和销毁线程所带来的性能开销。它提供了诸如线程池大小、队列大小、线程存活时间等参数,可以根据实际情况进行配置。 二、...

    Java实现通用线程池

    1. 创建线程池:使用ThreadPoolExecutor类创建线程池,设置线程池的核心线程数、最大线程数和keepAliveTime等参数。 2. 提交任务:将任务提交给线程池,线程池会自动选择空闲线程执行任务。 3. 监控线程池:使用...

    Android之线程池ThreadPoolExecutor的简介

    Android之线程池ThreadPoolExecutor的简介 Android之线程池ThreadPoolExecutor是Android中一个非常重要的组件,它解决了单线程下载数据的效率慢和线程阻塞的问题。ThreadPoolExecutor的应用也是优化实现的方式,它...

    了解Java线程池创建过程

    Java线程池创建过程详解 Java中的线程池是指一组可以复用的线程集合,这些线程可以执行不同的任务,而不是每次都创建新的线程。线程池的好处是可以提高系统的并发性能和可扩展性。 Java中提供了一个名为Executor...

    Android线程池管理的代码例子

    下面是一个基本的创建ThreadPoolExecutor的例子: ```java int corePoolSize = 5; // 核心线程数 int maximumPoolSize = 10; // 最大线程数 long keepAliveTime = 60L; // 空闲线程存活时间 TimeUnit unit = ...

Global site tag (gtag.js) - Google Analytics