java.util.concurrent.ThreadPoolExecutor学习

简介:
学习主体:Java线程池
学习目标:学会使用ThreadPoolExcutor创建线程池。
学习过程:
 
/** 
*    
*/
 
package test; 

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

/** 
* ThreadPoolExecutor 使用学习 
* @author daniel 

*/
 
public  class ThreadTest { 
   //pool handler 
   private ThreadPoolExecutor threadpool; 
    
   //initial the thread pool instance 
   /** 
    * Param: 
    *     corePoolSize - 池中所保存的线程数,包括空闲线程。    
         *     maximumPoolSize - 池中允许的最大线程数(采用LinkedBlockingQueue时没有作用)。    
         *     keepAliveTime - 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间,线程池维护线程所允许的空闲时间。 
         *     unit - keepAliveTime 参数的时间单位,线程池维护线程所允许的空闲时间的单位:秒 。    
         *     workQueue - 执行前用于保持任务的队列(缓冲队列)。此队列仅保持由 execute 方法提交的 Runnable 任务。 
         *     RejectedExecutionHandler - 线程池对拒绝任务的处理策略(重试添加当前的任务,自动重复调用execute()方法)     
    */
 
   public ThreadTest(){ 
    threadpool= new ThreadPoolExecutor(2,10,20,TimeUnit.SECONDS, new ArrayBlockingQueue(10), 
         new ThreadPoolExecutor.DiscardOldestPolicy()); 
  } 
    
   //add task into thread pool 
   public  void submit(){ 
    threadpool.execute( new Runnable(){ 
       public  void run(){ 
         try { 
          Thread.sleep(2000); 
        }  catch (InterruptedException e) { 
          e.printStackTrace(); 
        } 
        System.out.println( "Hello"); 
      }        
    });     
  } 
    
   /**     
         * close thread pool    
         */
     
         public  void shutdown() {        
                threadpool.shutdown();        
        } 
         
   /** 
    * @param args 
    */
 
   public  static  void main(String[] args) { 
    ThreadTest t= new ThreadTest(); 
     for( int i=0;i<20;i++){ 
      System.out.println( "time:"+i); 
      t.submit(); 
    } 
    System.out.println( ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); 
  } 
/** 
*当一个任务通过execute(Runnable)方法欲添加到线程池时: 
*     1.如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。 
*     2.如果此时线程池中的数量等于 corePoolSize,但是缓冲队列 workQueue未满,那么任务被放入缓冲队列。 
*     3.如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。 
*     4.如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过 handler所指定的策略来处理此任务。也就是:处理任务的优先级为:核心线程corePoolSize、任务队列workQueue、最大线程maximumPoolSize,如果三者都满了,使用handler处理被拒绝的任务。 
*     5.当线程池中的线程数量大于 corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。这样,线程池可以动态的调整池中的线程数。 
*/
 



    本文转自danni505 51CTO博客,原文链接:http://blog.51cto.com/danni505/206953,如需转载请自行联系原作者


相关文章
|
2月前
|
编解码 Oracle Java
java9到java17的新特性学习--github新项目
本文宣布了一个名为"JavaLearnNote"的新GitHub项目,该项目旨在帮助Java开发者深入理解和掌握从Java 9到Java 17的每个版本的关键新特性,并通过实战演示、社区支持和持续更新来促进学习。
82 3
|
2月前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
91 43
Java学习十六—掌握注解:让编程更简单
|
23天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
2月前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
36 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
1月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
2月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
50 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
2月前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
33 2
|
2月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
25 3
|
2月前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
32 2
|
2月前
|
存储 Java 编译器
【用Java学习数据结构系列】初识泛型
【用Java学习数据结构系列】初识泛型
20 2