`
brofe
  • 浏览: 232894 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JDK 5.0 自带线程池学习

    博客分类:
  • Java
阅读更多

根据《精通Spring企业应用开发详解》中Concurrent章节整理。

 

了解JDK1.5Executor

 

    java.util.concurrent.Executor 接口主要目的是将任务提交任务执行两者分离解耦。该接口定义了任务提交的方法,实现者可以提供不通的任务运行机制,解决具体的线程使用规则、调度方式等。

   

    Executor 只有一个方法:void executeRunnable cmd),它接受实现了Runnable接口的实例,该实例代表了一个需要执行的任务。调用者可以通过如下伪代码提交任务:

       

 

Executor exe = anExecutor;

exe.execute(new RunnableTask01()); // 任务一

exe.execute(new RunnableTask02()); // 任务二

 

备注:通过线程池统一管理不通任务的执行。

 

    Executor 本身并没有要求实现者已何种方式运行这些任务,一个简单的实现类就可以在接受任务时,在主线程中运行它们。如下伪代码:

 

 

public class SimpleExecutor implements Executor {

    public void execute(Runnable runnable) {

        runnable.run(); // 提交任务后直接在主线程中执行

    }

}

 

    但大多数情况下,任务并非在主线程下运行,它们需要在其他线程中运行,下列伪代码稍微有意义些:

 

 

public class SimpleExecutor implements Executor {

   

    public void execute(Runnable runnable) {

        new Thread(runnable).start(); // 提交任务后,在其他线程中执行

    }

}

 

Executor 接口引入了两个子接口:ExecutorService ScheduledExecutorService

Ø  ExecutorService 接口添加了结束任务的管理方法,此外在提交任务时可获取一个Future实例,以便通过他跟踪异步任务的运行情况。

Ø  ScheduledExecutorService 接口可以对任务进行调度,如指定执行的延迟时间和运行周期。

 

JDK5.0 本身提供的ThreadPoolExecutor 类实现了ExecutorExecutorService这两个接口,它使用一个线程池对任务进行调度。对于处理一些数量巨大的短小并发任务,采用线程池可以带来明显好处(诸如Web服务器、DB服务器、邮件服务器之类的应用需要处理来自远程的大量短小任务)。此外,通过调整线程池中的参数,让人物的数目超过某个阀值时,强制其他任何新的任务阻塞等待,直到获得一个线程来处理为止,从而防止资源无限占用。ThreadPoolExecutor 的子类ScheduledThreadPoolExecutor 实现了ScheduleExecutorService接口。

 

    java.util.concurrent 该包中通过一个综合性工厂类Executors来创建上述这些线程池接口的实例:

Ø  static ExecutorService newFixedThreadPool(int poolSize) :创建一个可重用固定线程数的线程池,以共享边界队列的方式来运行这些线程。

Ø  static ExecutorService newCachedThreadPool(): 线程池是动态的,不够用时创建新的线程,长时间不用的线程将被收回。

Ø  static ScheduledExecutorService newScheduledThreadPool(int corePoolSize, ThreadFactory tf): 创建一个线程池,它可以安排在给定延迟后运行命令或者定期执行。

 

下面是稍微具体的Demo

 

 

package com.brofe.concurrent;

 

import java.util.concurrent.Executor;

import java.util.concurrent.Executors;

 

public class ExecutorExample {

 

    private Executor executor = null; // 声明一个执行器,提供Setter方法

   

    private static int poolSize = 3; // 线程池中固定的线程数量

 

    /**

     * 用执行器执行多个任务

     */

    public void executeTasks() {

       for (int i = 0; i < 9; i++) {

           executor.execute(new SimpleTask("任务" + i));

       }

    }

 

    public void setExecutor(Executor executor) {

       this.executor = executor;

    }

   

    public static void main(String[] args) {

       ExecutorExample example = new ExecutorExample();

       example.setExecutor(Executors.newFixedThreadPool(poolSize));

      

       example.executeTasks();

    }

}

 

/**

 * 任务类

 */

class SimpleTask implements Runnable {

 

    private String taskName = null;

   

    public SimpleTask(String taskName) {

       this.taskName = taskName;

    }

   

    public void run() {

       System.out.println("执行名为: " + taskName + " 的线程。 线程编号为: " + Thread.currentThread().getId() );

    }

}

 

执行结果为:

 

执行名为: 任务0 的线程。 线程编号为: 8

执行名为: 任务3 的线程。 线程编号为: 8

执行名为: 任务4 的线程。 线程编号为: 8

执行名为: 任务5 的线程。 线程编号为: 8

执行名为: 任务6 的线程。 线程编号为: 8

执行名为: 任务7 的线程。 线程编号为: 8

执行名为: 任务8 的线程。 线程编号为: 8

执行名为: 任务1 的线程。 线程编号为: 9

执行名为: 任务2 的线程。 线程编号为: 10

 

可见这是10个任务共享了线程池中的三个线程。

 

   

 

分享到:
评论

相关推荐

    java自带并发框架

    Java并发框架是Java JDK中内置的一系列用于处理多线程并行执行的工具和类库,自JDK 5.0引入以来,极大地简化了并发编程的复杂性。这个框架由Doug Lea设计,并在JSR-166任务中提出,最终在Tiger(JDK 5)版本中被引入...

    Netty_in_Action(第五版目录修正)

    - **高级特性**:介绍一些高级特性,如异步操作、线程池管理等。 #### 第二部分:核心功能/组件篇 **第4章:传输层** - **不同类型的传输**:介绍Netty支持的各种传输类型,如TCP/IP、UDP等。 - **配置选项**:...

    webshpere application server 安装与调优

    - Java Development Kit (JDK):建议使用随WebSphere Application Server提供的JDK 1.1.6 - Java Servlet API:WebSphere Application Server自带JSDK 2.0或更高版本 - Web浏览器:Netscape Navigator 4.06/4.0.7、...

    【9493】基于springboot+vue的美食信息推荐系统的设计与实现.zip

    技术选型 【后端】:Java 【框架】:springboot 【前端】:vue 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧! 在当今快速发展的信息技术领域,技术选型是决定一个项目成功与否的重要因素之一。基于以下的技术栈,我们为您带来了一份完善且经过实践验证的项目资源,让您在学习和提升编程技能的道路上事半功倍。以下是该项目的技术选型和其组件的详细介绍。 在后端技术方面,我们选择了Java作为编程语言。Java以其稳健性、跨平台性和丰富的库支持,在企业级应用中处于领导地位。项目采用了流行的Spring Boot框架,这个框架以简化Java企业级开发而闻名。Spring Boot提供了简洁的配置方式、内置的嵌入式服务器支持以及强大的生态系统,使开发者能够更高效地构建和部署应用。 前端技术方面,我们使用了Vue.js,这是一个用于构建用户界面的渐进式JavaScript框架。Vue以其易上手、灵活和性能出色而受到开发者的青睐,它的组件化开发思想也有助于提高代码的复用性和可维护性。 项目的编译和运行环境选择了JDK 1.8。尽管Java已经推出了更新的版本,但JDK 1.8依旧是一种成熟且稳定的选择,广泛应用于各类项目中,确保了兼容性和稳定性。 在服务器方面,本项目部署在Tomcat 7+之上。Tomcat是Apache软件基金会下的一个开源Servlet容器,也是应用最为广泛的Java Web服务器之一。其稳定性和可靠的性能表现为Java Web应用提供了坚实的支持。 数据库方面,我们采用了MySQL 5.7+。MySQL是一种高效、可靠且使用广泛的关系型数据库管理系统,5.7版本在性能和功能上都有显著的提升。 值得一提的是,该项目包含了前后台的完整源码,并经过严格调试,确保可以顺利运行。通过项目的学习和实践,您将能更好地掌握从后端到前端的完整开发流程,提升自己的编程技能。欢迎参考博主的详细文章或私信获取更多信息,利用这一宝贵资源来推进您的技术成长之路!

    (源码)基于Spring、Struts和Hibernate的OA系统.zip

    # 基于Spring、Struts和Hibernate的OA系统 ## 项目简介 本项目是一个基于Spring、Struts和Hibernate框架的办公自动化(OA)系统。该系统主要用于企业内部的日常办公管理,包括用户登录、组织管理、权限管理等功能。系统前端使用现成的模板和JavaScript、jQuery技术,后端通过Struts、Hibernate和Spring框架实现业务逻辑和数据持久化。 ## 项目的主要特性和功能 ### 登录模块 防止多设备登录系统能够检测到同一账号在不同设备上的登录情况,并在检测到异地登录时通知用户并强制下线。 WebSocket支持使用WebSocket技术实现实时通知功能。 ### 组织管理模块 部门管理支持部门的增删改查操作,包括查看部门信息、职位信息和员工数量。 用户管理支持用户的增删改查操作,包括指定用户所在部门、职位和角色。 角色管理支持角色的增删改查操作,包括查看角色权限和修改角色权限。

    基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目)

    基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目),该项目是个人毕设项目,答辩评审分达到98分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目)基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目)基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目)基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目)基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目)基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高

    open3d python 给点云每个点设置不同的颜色

    open3d python 给点云每个点设置不同的颜色

    【电磁】基于matlab具有Mur吸收边界的区域的二维FDTD【含Matlab源码 9136期】.mp4

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    HengCe-18900-2024-2030中国室内木门市场现状研究分析与发展前景预测报告-样本.docx

    HengCe-18900-2024-2030中国室内木门市场现状研究分析与发展前景预测报告-样本.docx

    (源码)基于ASP.NET Web API的供应链管理系统.zip

    # 基于ASP.NET Web API的供应链管理系统 ## 项目简介 供应链管理系统(SCM)是一个基于ASP.NET Web API框架开发的企业级应用,旨在帮助企业高效管理供应链中的各个环节。系统涵盖了供应商管理、采购管理、库存管理、订单管理等多个模块,通过API接口实现数据的增删改查操作,确保供应链的顺畅运作。 ## 项目的主要特性和功能 1. 供应商管理 供应商信息的增删改查操作。 供应商联系人管理。 供应商评级和分类管理。 2. 采购管理 采购订单的创建、编辑和删除。 采购产品的状态管理。 采购合同的生成和管理。 3. 库存管理 库存产品的入库和出库管理。 库存状态的实时监控。 4. 订单管理 订单的创建、编辑和删除。 订单状态的跟踪和管理。 5. 用户管理 用户登录和权限管理。 用户角色的分配和管理。

    基于SpringBoot的“学生考勤管理系统”的设计与实现(源码+数据库+文档+PPT).zip

    系统主要包括首页,个人中心,学生管理,教师管理,班级信息管理,课程信息管理,签到信息管理,考勤信息管理,请假信息管理,考勤统计管理等功能模块。

    维特协议标准精度示例程序c.zip

    c语言

    DICOM文件+DX放射平片-数字X射线图像DICOM测试文件

    DICOM文件+DX放射平片—数字X射线图像DICOM测试文件,文件为.dcm类型DICOM图像文件文件,仅供需要了解DICOM或相关DICOM开发的技术人员当作测试数据或研究使用,请勿用于非法用途。

    C#ASP.NET仓储管理系统源码数据库 SQL2008源码类型 WebForm

    ASP.NET仓储管理系统源码 一、 程序说明 该程序大部分使用于生产制造厂,其中结合了制造厂的采购,销售,生产等. 开源部分是仓库系统后台管理系 统, 在给客户实施的过程中利用到了很多硬件设备, 设计到Wince系统,Android系统等PDA设备,各种打印 机,条码打印机,感应设备等,而且这些可能在整个项目中占据主导,而后台管理系统只是辅助作用的。 该程序使用的.NET MVC开发,大量使用到了jQuery,以及Bootstrap。 数据库使用了SQL Server.

    【小程序毕业设计】面向文艺影视社群的微信小程序源码(完整前后端+mysql+说明文档).zip

    环境说明: 开发语言:Java/php JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea 小程序框架:uniapp/原生小程序 开发工具:HBuilder X/微信开发者

    Skia-macOS-Release-arm64.zip

    Skia-macOS-Release-arm64.zip aseprite 安装所需依赖安装包

    中国品牌日研究特辑-数字经济时代下中国品牌高质量发展之用户趋势.pdf

    中国品牌日研究特辑-数字经济时代下中国品牌高质量发展之用户趋势.pdf

    生成xcinsphfs0exefsromfscertifateticket转储从任天堂Switch游戏卡和安装的SDe.zip

    c语言

    一个基于qt开发的包含各种基础图像处理技术的桌面应用,图像处理算法基于halcon,有直接调用halcon脚本和执行halcon

    一个基于qt开发的包含各种基础图像处理技术的桌面应用,图像处理算法基于halcon,有直接调用halcon脚本和执行halcon C++代码方式。 导入图片,预处理,滤波,边缘检测,阈值分割,形态学变换,图像增强,图像变换,

    【9312】基于Springboot+vue的精品水果线上销售网站的设计与实现.zip

    技术选型 【后端】:Java 【框架】:springboot 【前端】:vue 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧! 在当今快速发展的信息技术领域,技术选型是决定一个项目成功与否的重要因素之一。基于以下的技术栈,我们为您带来了一份完善且经过实践验证的项目资源,让您在学习和提升编程技能的道路上事半功倍。以下是该项目的技术选型和其组件的详细介绍。 在后端技术方面,我们选择了Java作为编程语言。Java以其稳健性、跨平台性和丰富的库支持,在企业级应用中处于领导地位。项目采用了流行的Spring Boot框架,这个框架以简化Java企业级开发而闻名。Spring Boot提供了简洁的配置方式、内置的嵌入式服务器支持以及强大的生态系统,使开发者能够更高效地构建和部署应用。 前端技术方面,我们使用了Vue.js,这是一个用于构建用户界面的渐进式JavaScript框架。Vue以其易上手、灵活和性能出色而受到开发者的青睐,它的组件化开发思想也有助于提高代码的复用性和可维护性。 项目的编译和运行环境选择了JDK 1.8。尽管Java已经推出了更新的版本,但JDK 1.8依旧是一种成熟且稳定的选择,广泛应用于各类项目中,确保了兼容性和稳定性。 在服务器方面,本项目部署在Tomcat 7+之上。Tomcat是Apache软件基金会下的一个开源Servlet容器,也是应用最为广泛的Java Web服务器之一。其稳定性和可靠的性能表现为Java Web应用提供了坚实的支持。 数据库方面,我们采用了MySQL 5.7+。MySQL是一种高效、可靠且使用广泛的关系型数据库管理系统,5.7版本在性能和功能上都有显著的提升。 值得一提的是,该项目包含了前后台的完整源码,并经过严格调试,确保可以顺利运行。通过项目的学习和实践,您将能更好地掌握从后端到前端的完整开发流程,提升自己的编程技能。欢迎参考博主的详细文章或私信获取更多信息,利用这一宝贵资源来推进您的技术成长之路!

Global site tag (gtag.js) - Google Analytics