`
dwj147258
  • 浏览: 187481 次
  • 性别: 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

    线程池的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,那么超出数量的线程排队等候,等其他线程执行完毕再从队列中取出任务来执行。...

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

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

    线程池相关详解及总结.doc

    线程池设计思路,java提供自带的线程池类ThreadPoolExecutor详解,Executors调用静态方法创建线程池

    Java线程池文档

    Reference: 《创建Java线程池》[1],《Java线程:新特征-线程池》[2], 《Java线程池学习》[3],《线程池ThreadPoolExecutor使用简介》[4],《Java5中的线程池实例讲解》[5],《ThreadPoolExecutor使用和思考》[6] ...

    线程池ThreadPoolExecutor

    线程的创建和销毁比较消耗资源,所以有一种更加高效快捷的方式管理线程—-线程池。 先来看一下线程池的java模型 Executor:线程池顶级接口,只有一个方法 ExecutorService:真正的线程池接口 void execute(Runnable...

    Java ThreadPoolExecutor 线程池的使用介绍

    提供工厂方法来创建不同类型的线程池,这篇文章主要介绍了Java ThreadPoolExecutor 线程池的使用介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来...

    java编发编程:JUC综合讲解

    1. 线程池(ThreadPoolExecutor): 线程池是 JUC 中最重要的组件之一,它解决了频繁创建和销毁线程所带来的性能开销问题。 2. 并发集合类(Concurrent Collections): JUC 提供了线程安全的并发集合类,如 ...

    java线程池概念.txt

    corePoolSize:核心池的大小,在创建了线程池后,线程池中的线程数为0,当有任务来之后,就会创建一个线程去执行任务,当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中; ...

    7000字+24张图带你彻底弄懂线程池.md

    线程池创建的时候,如果不指定拒绝策略就默认是AbortPolicy策略。当然,你也可以自己实现RejectedExecutionHandler接口,比如将任务存在数据库或者缓存中,这样就数据库或者缓存中获取到被拒绝掉的任务了。

    Python 如何创建一个线程池

    你创建一个工作者线程池,用来响应客户端请求或执行其他的工作。 解决方案 concurrent.futures 函数库有一个 ThreadPoolExecutor 类可以被用来完成这个任务。 下面是一个简单的TCP服务器,使用了一个线程池来响应...

    更好的使用Java线程池

     ExecutorService基于池化的线程来执行用户提交的任务,通常可以简单的通过Executors提供的工厂方法来创建ThreadPoolExecutor实例。  线程池解决的两个问题:1)线程池通过减少每次做任务的时候产生的性能消耗来...

    python线程池如何使用

    线程池的基类是 concurrent.futures 模块中的 Executor,Executor 提供了两个子类,即 ThreadPoolExecutor 和ProcessPoolExecutor,其中 ThreadPoolExecutor 用于创建线程池,而 ProcessPoolExecutor 用于创建进程池...

    MutliThreading-and-Concurrency

    Java线程池和ThreadPoolExecutor Java线程池管理工作线程池,它包含使任务等待执行的队列。Java线程池管理Runnable线程的集合,工作线程从队列中执行Runnable。 Java 5,Java并发API提供了一种机制Executor框架。 ...

    完全解析Android多线程中线程池ThreadPool的原理和使用

    上述6个参数的配置 决定了 线程池的功能,具体设置时机 = 创建 线程池类对象时 传入 ThreadPoolExecutor类 = 线程池的真正实现类 开发者可根据不同需求 配置核心参数,从而实现自定义线程池 // 创建线程池对象...

    线程-线程池-锁-集合-Map-队列.docx

    线程是系统中可执行调度的...线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,规避资源耗尽的风险。集合的详细描述,以及集合中的异同点,HashMap不同jdk版本区别,ConcurrentHashMap介绍。

    ThreadPoolBuilder工具类

    阿里的代码规范中提出,不推荐使用JDK提供的线程池创建方法(newCachedThreadPool、newFixedThreadPool等),因此对ThreadPoolExecutor方法进行了简单封装,以方便使用。

    Android多线程:完全解析线程池ThreadPool原理&使用

    线程池中有6个核心参数,具体如下上述6个参数的配置决定了线程池的功能,具体设置时机=创建线程池类对象时传入ThreadPoolExecutor类=线程池的真正实现类开发者可根据不同需求配置核心参数,从而实现自定义线程池注:...

    对 Java 四种线程池的简要分析

    在 Java 中,线程池的顶级接口是 Executor,但它并不是线程池的具体实现,真正的线程池实现类为 ThreadPoolExecutor。 我们可以向线程池中传递任务以获得执行,可传递的任务有以下两种,分别是通过 Runnable 实现的...

    google用于管理线程,符合阿里线程池规范ThreadFactoryBuilder的jar包 guava 27.0.1-jre.jar

    最近阿里发布的 Java开发手册中强制线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。 其中ThreadFactoryBuilder...

Global site tag (gtag.js) - Google Analytics