Java中Executor接口用法总结
本文实例讲述了Java中Executor接口用法。分享给大家供大家参考。具体如下:
1.Java中Executor接口的定义
public interface Executor { void execute(Runnable command); }
2.Executors以下静态工厂方法创建一个线程池:
a) newFixedThreadPool:创建一个定长的线程池。达到最大线程数后,线程数不再增长。
如果一个线程由于非预期Exception而结束,线程池会补充一个新的线程。
b) newCachedThreadPool:创建一个可缓存的线程池。当池长度超过处理需求时,可以回收空闲的线程。
c) newSingleThreadPool:创建一个单线程executor。
d) newScheduledThreadPool:创建一个定长的线程池,而且支持定时的以及周期性的任务执行。
类似于Timer。但是,Timer是基于绝对时间,对系统时钟的改变是敏感的,而ScheduledThreadPoolExecutor只支持相对时间。
3.对比Timer类的应用总结
1) Timer是创建唯一的线程来执行所有的timer任务。如果一个任务超时了,会导致其他的TimerTask时间准确性出问题。
2) 如果TimerTask抛出uncheck 异常,Timer将会产生无法预料的行为。因此,ScheduledThreadPoolExecutor可以完全代替Timer。
3) 为了解决执行服务的生命周期问题,ExecutorService接口扩展了Executor。线程池将包括3个状态:running,shutting down,terminated。
4.Callable和Future
因为Runnable没有返回值,并且不能抛出checked异常,所以Callable是更佳的抽象。(Callable<Void>表示无返回值的任务)。
Future描述了任务的生命周期,并提供了相关的方法来获取任务的结果、取消任务以及检查任务完成或则是否取消。
5.CompletionService整合了Executor和BlockingQueue的功能。
其take和poll可以阻塞的获取完成的任务。
希望本文所述对大家的java程序设计有所帮助。
相关推荐
-
java中Executor,ExecutorService,ThreadPoolExecutor详解
java中Executor,ExecutorService,ThreadPoolExecutor详解 1.Excutor 源码非常简单,只有一个execute(Runnable command)回调接口 public interface Executor { /** * Executes the given command at some time in the future. The command * may execute in a new thread, in a pooled thre
-
Java ThreadPoolExecutor的参数深入理解
Java ThreadPoolExecutor的参数深入理解 一.使用Executors创建线程池 之前创建线程的时候都是用的Executors的newFixedThreadPool(),newSingleThreadExecutor(),newCachedThreadPool()这三个方法.当然Executors也是用不同的参数去new ThreadPoolExecutor 1. newFixedThreadPool() 创建线程数固定大小的线程池. 由于使用了LinkedBlo
-
java多线程并发executorservice(任务调度)类
复制代码 代码如下: package com.yao; import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.ScheduledFuture;import java.util.concurrent.TimeUnit; /** * 以下是一个带方法的类,它设置了 ScheduledExecutorService ,2
-
java 中ThreadPoolExecutor原理分析
java 中ThreadPoolExecutor原理分析 线程池简介 Java线程池是开发中常用的工具,当我们有异步.并行的任务要处理时,经常会用到线程池,或者在实现一个服务器时,也需要使用线程池来接收连接处理请求. 线程池使用 JDK中提供的线程池实现位于java.util.concurrent.ThreadPoolExecutor.在使用时,通常使用ExecutorService接口,它提供了submit,invokeAll,shutdown等通用的方法. 在线程池配置方面,Executor
-
Java Executor 框架的实例详解
Java Executor 框架的实例详解 大多数并发都是通过任务执行的方式来实现的. 一般有两种方式执行任务:串行和并行. class SingleThreadWebServer { public static void main(String[] args) throws Exception { ServerSocket socket = new ServerSocket(80); while(true) { Socket conn = socket.accept(); handleRequ
-
Java并发编程中使用Executors类创建和管理线程的用法
1. 类 Executors Executors类可以看做一个"工具类".援引JDK1.6 API中的介绍: 此包中所定义的 Executor.ExecutorService.ScheduledExecutorService.ThreadFactory 和 Callable 类的工厂和实用方法.此类支持以下各种方法: (1)创建并返回设置有常用配置字符串的 ExecutorService 的方法. (2)创建并返回设置有常用配置字符串的 ScheduledExecutorServi
-
java ExecutorService使用方法详解
下面的例子主要讨论两个问题: 问题1.线程池固定大小,假设为5.那么向线程池放入10个线程,运行效果如何?其他线程的状态? 问题2.那么如何从线程池中移除某一个线程,确切说是使某一个线程成为空闲线程? 例子: package com.dada.executorService; import java.util.concurrent.TimeUnit; public class JobThread extends Thread { // 为线程命名 public JobThread(String
-
详解Java利用ExecutorService实现同步执行大量线程
自从java1.5以后,官网就推出了Executor这样一个类,这个类,可以维护我们的大量线程在操作临界资源时的稳定性. 先上一段代码吧: TestRunnable.java public class TestRunnable implements Runnable { private String name; public TestRunnable(String name) { this.name = name; } @Override public void run() { while (t
-
理解java多线程中ExecutorService使用
java.util.concurrent包里提供了关于多线程操作的类,平常用的比较多的是ExecutorService及其实现类(如ThreadPoolExecutor等),Executor,Executors,Future,Callable等 1. ExecutorService(继承自Executor)接口:提供了一些异步的多线程操作方法,如execute(), submit(), shutdown(), shutdownNow()等 2. Executor接口:执行提交的任务(线程),只有
-
java ThreadPoolExecutor 并发调用实例详解
java ThreadPoolExecutor 并发调用实例详解 概述 通常为了提供任务的处理速度,会使用一些并发模型,ThreadPoolExecutor中的invokeAll便是一种. 代码 package test.current; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.Callable; import java.util
-
java ThreadPoolExecutor使用方法简单介绍
java ThreadPoolExecutor 前言: 在项目中如果使用发短信这个功能,一般会把发短信这个动作变成异步的,因为大部分情况下,短信到底是发送成功或者失败,都不能影响主流程.当然像发送MQ消息等操作也是可以封装成异步操作的. 使用基本的New Thread 如果想一个操作变成异步的,可以直接new thread,然后在run方法中实现业务操作即可.例如: new Thread(new Runnable() { public void run() { //发短信.发MQ消息等 } }
-
Java 线程池ExecutorService详解及实例代码
Java 线程池ExecutorService 1.线程池 1.1什么情况下使用线程池 单个任务处理的时间比较短. 将需处理的任务的数量大. 1.2使用线程池的好处 减少在创建和销毁线程上所花的时间以及系统资源的开销. 如果不使用线程池,有可能造成系统创建大量线程而导致消耗系统内存以及"过度切换"; 2.ExecutorService和Executors 2.1简介 ExecutorService是一个接口,继承了Executor, public interface ExecutorS
随机推荐
- for循环 + setTimeout 结合一些示例(前端面试题)
- 详解C++编程中向函数传递引用参数的用法
- Angular中使用ui router实现系统权限控制及开发遇到问题
- 简单实现js悬浮导航效果
- java 1.8 动态代理源码深度分析
- JavaScript数组操作函数汇总
- php使用Image Magick将PDF文件转换为JPG文件的方法
- ThinkPHP CURD方法之where方法详解
- 详解Android中App的启动界面Splash的编写方法
- Javascript学习指南
- MySQL函数大全及用法示例分享
- 关于PHP实现异步操作的研究
- javascript实现的HashMap类代码
- javascript HTML+CSS实现经典橙色导航菜单
- jquery uaMatch源代码
- Android自动测试工具Monkey的实现方法
- 详解SpringMVC——接收请求参数和页面传参
- jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
- Java动态代理机制的实例详解
- 从数据库读取数据后将其输出成html标签的三种方法