摘要:创建实现类执行结束再创建测试类,并创建线程池创建线程池说明类和接口提供线程池操作的接口提供方法,传入的实例即本例中的的实现类,提供种构造方法。时间单位线程工厂用来创建线程的。
创建Runnable实现类
package ThreadTest; /** * * @author Administrator * */ public class RunnableTest implements Runnable { @Override public void run() { for (int i = 0; i < 20; i++) { System.out.println(Thread.currentThread().getName()+"--"+i); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName()+"--执行结束"); } }
再创建测试类,并创建线程池
package ThreadTest; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import com.google.common.util.concurrent.ThreadFactoryBuilder; public class ThreadPoolTest { public static void main(String[] args) { ThreadFactory threadFactory=new ThreadFactoryBuilder().setNameFormat("myThreadPool-%d").build(); LinkedBlockingQueueworkQueue=new LinkedBlockingQueue (250); ExecutorService executor=new ThreadPoolExecutor(3, 5, 20, TimeUnit.SECONDS, workQueue, threadFactory);//创建线程池 for(int i=0;i<10;i++){ RunnableTest test=new RunnableTest(); executor.execute(test); } } }
说明
类和接口
1 ExecutorService 提供线程池操作的接口 提供void execute(Runnable command)方法,传入Runnable的实例即本例中的test; 2 ThreadPoolExecutor ExecutorService的实现类,提供4种构造方法。(只写最后一个) new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler); (1)corePoolSize 核心线程数,即本例中填写的数字3。 (2)workQueue任务队列,负责存放超过核心线程数的请求,可指定大小如本例中LinkedBlockingQueue(250)的250; (3)maximumPoolSize 创建最大线程数,只有当请求超过任务队列容量和核心线程数量是才会创建,即本例中250+3=253; (4)handler 当请求超过最大线程数maximumPoolSize和任务队列容量之和时,会调用。(可以查看该RejectedExecutionHandler接口的几个实现类,定义了处理策略,一般默认就行) (5)keepAliveTime 线程存活时间,对挡前线程多于核心线程数量时会杀死多于的线程保留到核心线程数量。 (6)unit 时间单位 (7)ThreadFactory 线程工厂 用来创建线程的。(采用Google guava来创建的)
运行展示
创建了0,1,2 三个核心线程(当有请求时核心线程才会创建,除非手动设置);
运行过程中可以通过动态更改corePoolSize和maximumPoolSize 的大小,但是只有ThreadPoolExecutor提供了set方法。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/68332.html
摘要:一内存区域虚拟机在运行时,会把内存空间分为若干个区域,根据虚拟机规范版的规定,虚拟机所管理的内存区域分为如下部分方法区堆内存虚拟机栈本地方法栈程序计数器。前言 在JVM的管控下,Java程序员不再需要管理内存的分配与释放,这和在C和C++的世界是完全不一样的。所以,在JVM的帮助下,Java程序员很少会关注内存泄露和内存溢出的问题。但是,一旦JVM发生这些情况的时候,如果你不清楚JVM内存的...
摘要:从使用到原理学习线程池关于线程池的使用,及原理分析分析角度新颖面向切面编程的基本用法基于注解的实现在软件开发中,分散于应用中多出的功能被称为横切关注点如事务安全缓存等。 Java 程序媛手把手教你设计模式中的撩妹神技 -- 上篇 遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样…… Java 进阶面试问题列表 -...
摘要:本文主要内容为简单总结中线程池的相关信息。方法簇方法簇用于创建固定线程数的线程池。三种常见线程池的对比上文总结了工具类创建常见线程池的方法,现对三种线程池区别进行比较。 概述 线程可认为是操作系统可调度的最小的程序执行序列,一般作为进程的组成部分,同一进程中多个线程可共享该进程的资源(如内存等)。在单核处理器架构下,操作系统一般使用分时的方式实现多线程;在多核处理器架构下,多个线程能够...
摘要:第一阶段基础阶段基础程序员重点把搞熟练核心是安装配置基本操作目标能够完成基本的系统安装,简单配置维护能够做基本的简单系统的开发能够在中型系统中支持某个功能模块的开发。本项不做重点学习,除非对前端有兴趣。 第一阶段:基础阶段(基础PHP程序员) 重点:把LNMP搞熟练(核心是安装配置基本操作) 目标:能够完成基本的LNMP系统安装,简单配置维护;能够做基本的简单系统的PHP开发;能够在P...
阅读 2328·2021-11-22 14:56
阅读 1460·2021-09-24 09:47
阅读 904·2019-08-26 18:37
阅读 2818·2019-08-26 12:10
阅读 1522·2019-08-26 11:55
阅读 3140·2019-08-23 18:07
阅读 2294·2019-08-23 14:08
阅读 605·2019-08-23 12:12