使用Executor管理Thread对象详解
java SE5的java.util.concurrent包中的执行器(Executor)是管理Thread对象的优选方法。使用Executor管理Thread对象可以简化并发编程。
Executor是在客户端和任务执行之间提供了一个间接层,与客户端直接执行任务不同,我们将使用Executor来执行任务。Executor允许你管理异步任务的执行,而无须显示地管理线程的生命周期。
线程对象知道如何运行具体的任务,它暴露了要执行的单一方法。ExecutorService(具有生命周期的Executor)知道如何构建恰当的上下文来执行runnable对象。
ExecutorService对象是使用静态的Executor方法来创建的,这个方法可以确定其Executor类型
---------------------------------------CachedThreadPool----------------------------------------
ExecutorService exec = Executors.newCachedThreadPool();
CachedThreadPool将为每个任务多创建一个线程,需要比较大的创建线程的开销。CachedThreadPool在程序中会创建与所需数量相同的线程,然后在它回收旧线程时停止创建,因此它是合理的Executor的首选。但是当这种方式会引发问题时,你就需要切换到FixedThreadPool。
--------------------------------------FixedThreadPool----------------------------------------------
ExecutorService exec = Executors.newFixedThreadPool(5);
FixedThreadPool可以一次性预先执行代价高昂的线程分配,因此也就可以控制线程的数量。这可以节省时间,因为你不用为每个任务都固定地付出创建线程的开销。在事件驱动的系统中,需要线程的事件处理器,通过直接从池中获取线程哼,也可以尽快的得到服务。因为FixedThreadPool使用的Thread对象的数量是有限且确定的,所以你不会滥用可获得的资源。
--------------------------------------SingleThreadExecutor------------------------------------------
ExecutorService exec = Executors.newSingleThreadExecutor();
SingleThreadExecutor就像是线程数量为1的FixedThreadPool。SingleThreadExecutor在你希望在另一个线程中连续运行的任何事物(长期存活的任务)来说是很有用的,例如监听进入的套接字连接的任务。同时在线程中运行的短任务也很方便,例如更新本地或远程日志的小任务或是事件分发线程。
如果向SingleThreadExecutor提交了多个任务,那么这些任务将会排队执行,每个任务都会在下个任务开始之前运行结束,所有任务都使用相同的线程,安全性会得到提高。也就是说SingleThreadExecutor会序列化所有提交给它的任务,并会维护它自己(隐藏)的悬挂任务队列。
SingleThreadExecutor可以确保任意时刻在任何线程中都只有唯一的任务在运行。在这种方法中,你不需要在共享资源上处理同步问题。通过序列化任务,你可以消除对序列化对象的需求。
---------------------------------------shutdown()--------------------------------------------------------
ExecutorService exec = Executors.newSingleThreadExecutor();
exec.shutdown();
调用ExecutorService对象中的shutdown()方法可以防止新任务被提交给这个Executor,当前线程将继续运行在shutdown()被调用之前提交的所有任务。这个程序将在Executor中的所有任务完成之后尽快退出。
使用Executor管理Thread对象详解的更多相关文章
- Java线程创建形式 Thread构造详解 多线程中篇(五)
Thread作为线程的抽象,Thread的实例用于描述线程,对线程的操纵,就是对Thread实例对象的管理与控制. 创建一个线程这个问题,也就转换为如何构造一个正确的Thread对象. 构造方法列表 ...
- mvc-servlet---ServletConfig与ServletContext对象详解(转载)
ServletConfig与ServletContext对象详解 一.ServletConfig对象 在Servlet的配置文件中,可以使用一个或多个<init-param>标签为s ...
- Linux内存管理之mmap详解
转发之:http://blog.chinaunix.net/uid-26669729-id-3077015.html Linux内存管理之mmap详解 一. mmap系统调用 1. mmap系统调用 ...
- 系统批量运维管理器Fabric详解
系统批量运维管理器Fabric详解 Fabrici 是基于python现实的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包 ...
- GridBagLayout布局管理器应用详解
http://www.cnblogs.com/kungfupanda/p/7220217.html GridBagLayout布局管理器应用详解 很多情况下,我们已经不需要通过编写代码来实现一个应用程 ...
- Java基础-进程与线程之Thread类详解
Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...
- Thread.setDaemon详解
Thread.setDaemon详解 线程分为两种类型:用户线程和守护线程.通过Thread.setDaemon(false)设置为用户线程:通过Thread.setDaemon(true)设置为守护 ...
- elasticsearch最全详细使用教程:入门、索引管理、映射详解、索引别名、分词器、文档管理、路由、搜索详解
一.快速入门1. 查看集群的健康状况http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 状 ...
- java.lang.Thread类详解
java.lang.Thread类详解 一.前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前 ...
随机推荐
- ORACLE数据库事务隔离级别
转自:https://www.cnblogs.com/jackal/archive/2011/02/14/1954231.html 事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度. ...
- cdr X6 64位32位缩略图补丁包
cdr X6 64位32位缩略图补丁包下载 安装了X6没有缩略图的话,点击下面链接下载安装插件即可 点击下载
- Windows如何使用Apache的ab工具进行网站性能测试(Apache服务器自带了ab压力测试工具,可以用来测试网站性能,使用简单方便)
打开Apache服务器的安装路径,在bin目录中有一个ab.exe的可执行程序,就是我们要介绍的压力测试工具. 在Windows系统的命令行下,进入ab.exe程序所在目录,执行ab.exe程序.注意 ...
- PHP错误处理,无法显示验证码。。无法显示首页等莫名其妙的500
use the date.timezone setting or the date_default_timezone_set() 这是由于调用date时,若timezone设置不正确所产生的E_NOT ...
- [NSUserDefaults]的使用:登陆后不再显示登录界面。
简介: NSUserDefaults是IOS应用用来存储用户偏好和配置信息的途径,就像是一个数据库,但是它通过键值对(key-value)的方式存储. 比如["Thematrix" ...
- Learning PHP Design Patterns
Learning PHP Design Patterns CHAPTER 1 Algorithms handle speed of operations, and design patterns ha ...
- 【转】Mysql的配置文件详解
[client]port = 3306socket = /tmp/mysql.sock [mysqld]port = 3306socket = /tmp/mysql.sock basedir = /u ...
- 使用jQuery操作Cookies
转载自: https://www.cnblogs.com/yonge/articles/2698106.html Cookies是一种能够让网站服务器把少量数据储存到客户端的硬盘或内存,或是从客户端的 ...
- sql server如何把查询结果发邮件出去
原本:https://zhidao.baidu.com/question/1819725575342685788.html --1.启用Database Mail扩展存储过程 sp_configure ...
- 0408-服务注册与发现-Eureka常用配置
一.概述 参看地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_appendix ...