`
smm11230704
  • 浏览: 86810 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JDK中的ThreadPoolExecutor线程池简介

阅读更多

一、简介

 

好吧。坑爹了,我以为JDK里面没有线程池这种东西,之前就随便写了一个,应用到线上系统了。

结果最近不经意的发现了这个东西。开始悔过认错。给大家简单介绍一下这个吧。

 

二、Java线程池(二)

 

所说的线程池(二)就是这个java.util.concurrent包下的ThreadPoolExecutor

他的作用就是使用可能的几个池线程之一执行每个提交的任务

 

线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源(包括执行任务集时使用的线程)的方法。每个 ThreadPoolExecutor 还维护着一些基本的统计数据,如完成的任务数。

 

三、介绍使用咯

 

 

JDK中推荐的使用方式是较为方便的 Executors 工厂方法 Executors.newCachedThreadPool()(无界线程池,可以进行自动线程回收)、Executors.newFixedThreadPool(int)(固定大小线程池)和 Executors.newSingleThreadExecutor()(单个后台线程)

 

属性中有一个corePoolSize 表示初始大小设置。

maximumPoolSize 表示最大数量设置。

 

线程池使用execute()方法来提交线程操作。

 

并且这个线程池还提供了beforeExecute() 和 afterExecute 这两种方法分别在执行每个任务之前和之后调用。它们可用于操纵执行环境。

 

四、简单例子

 

package com.immomo.test.bean;

import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;

public class MongoTest {

	
	public void start(){
		
		int threadPoolSize = 800;
		
		// 固定大小线程池 //800
		ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(threadPoolSize);

		// 创建线程工厂
		ThreadFactory threadFactory = Executors.defaultThreadFactory();
		
		for (int i = 0; i < threadPoolSize; i++) {
			try {
				Thread thread = threadFactory.newThread(new SystemOutPrintThread());
				executor.execute(thread);
				Thread.sleep(100);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	public static void main(String[] args) {
		MongoTest test = new MongoTest();
		test.start();
	}
}

class SystemOutPrintThread implements Runnable{

	@Override
	public void run() {
		
		while (true) {
			System.out.println("[Andy] 乱打印一点垃圾信息咯~~");
				
		}
		
	}
	
}

 

 

乱写了800个死循环线程都扔进去了- - 哈哈哈。。

 

好了就这样了 大家看着玩吧~~ 下午好

分享到:
评论

相关推荐

    JDK1.5中的线程池

    JDK1.5中的线程池(ThreadPoolExecutor)使用简介

    JDK1[1].5中的线程池(ThreadPoolExecutor)使用简介

    JDK1[1].5中的线程池(ThreadPoolExecutor)使用简介

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

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

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

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

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

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

    JDK1[1].5中的线程池(ThreadPoolExecutor)使用简介.

    corePoolSize: 线程池维护线程的最少数量 maximumPoolSize:线程池维护线程的最大数量 keepAliveTime: 线程池维护线程所允许的空闲时间 unit: 线程池维护线程所允许的空闲时间的单位 workQueue: 线程池所使用的...

    JDK之ThreadPoolExecutor源码分析1

    1. 任务提交到线程池中,首先会检测线程池中核心线程数是否已经到达到达上限,若未到达则执行步骤2,反之执行步 2. 初始化一条线程执行任务 3. 尝试将任务放到

    Java线程池文档

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

    Java中的线程与线程池.pptx

    本文档对Java中的线程和线程池进行了简单介绍。首先,阐述了为什么需要线程、...然后,介绍了为什么需要线程池,JDK自带的线程池实现方式ThreadPoolExecutor的使用及其原理,最后强调ThreadPoolExecutor应用的注意点。

    java线程池概念.txt

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

    ThreadPoolBuilder工具类

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

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

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

    更好的使用Java线程池

    这篇文章结合Doug Lea大神在JDK1.5提供的JCU包,分别从线程池大小参数的设置、工作线程的创建、空闲线程的回收、阻塞队列的使用、任务拒绝策略、线程池Hook等方面来了解线程池的使用,其中涉及到一些细节包括不同...

    Java线程池框架核心代码分析

     下面,我们来分析一下 Java 线程池框架的实现ThreadPoolExecutor。  下面的分析基于JDK1.7  生命周期  ThreadPoolExecutor中,使用CAPACITY的高3位来表示运行状态,分别是:  RUNNING:接收新任务,并且...

    第7章-JUC多线程v1.1.pdf

    如果线程池中的线程数量大于corePoolSize时, 如果某线程空闲时间超过keepAliveTime, 线程将被终止, 直至线程池中的线程数目小于等于corePoolSize; 如果允许核心池中的线程设置存活时间, 那么核心池中的线程空闲时间...

    jtp-JohanThreadPool新版

    JohanThreadPool最早起源于jdk-1.4时代,当时如果有完善的ThreadPoolExecutor,或许JohanThreadPool就不会诞生了:) 不过经过多年对JohanThreadPool的小修小改,经过各种使用场合的锤炼,发现不论是开发,还是性能...

    Java并发Executor框架

    1、Executor框架简介  从JDK5开始,工作单元和执行机制隔离开来,工作单元包括Runnable和Callable,执行机制由Executor提供。...  ThreadPoolExecutor是线程池的核心实现类,执行被提交的任务  ScheduledT

    【2018最新最详细】并发多线程教程

    21.线程池ThreadPoolExecutor实现原理 22.线程池之ScheduledThreadPoolExecutor 23.FutureTask基本操作总结 24.Java中atomic包中的原子操作类总结 25.大白话说java并发工具类-CountDownLatch,CyclicBarrier 26....

    Java并发编程(学习笔记).xmind

    配置ThreadPoolExecutor(自定义的线程池) 此处需要注意系统默认提供的线程池是如何配置的 扩展ThreadPoolExector GUI应用程序探讨 活跃度(Liveness)、性能、测试 避免活跃性危险 死锁 锁...

    ArchKnowledgeTree:架构师知识谱系梳理,包含Java core, JUC, JVM, MySQL,MQ, redis,分布式相关等各种知识点整理。是我按个人理解学习、整理出的一个知识库

    ArchKnowledgeTree ... 源码分析之Java线程池ThreadPoolExecutor 常见工具 [源码分析之Guava RateLimiter源码分析](source_code/源码分析之Guava RateLimiter源码分析.md) 源码分析之netty线程模型 Mes

Global site tag (gtag.js) - Google Analytics