`
chenzehe
  • 浏览: 532402 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Executor框架和线程池

 
阅读更多

简介

    在JDK5后主要提供的多线程处理都在java.util.concurrent包中,多线程的主要抽象不是Thread,而是Executor,Executor为接口,定义在java.util.concurrent包下,只定义了一个方法:

public interface Executor {
    void execute(Runnable command);
}

它提供了一种标准的方法将任务的提交和过程和执行过程解耦,并用Runnable来表示任务,Executor的实现还提供了对生命周期的支持,以及统计信息收集、应用程序管理机制和性能监视机制。Executor基于生产者——消费者模式,提交任务的过程就相当于是生产者,生成待完成的工作单元,执行任务的过程相当于消费者,执行完这些工作单元。如果在程序中实现一个生产者——消费者的设计,那么最简单的方法就使用Executor。每当看到下面这种形式的代码:new Thread(runnable).start(),最好考虑使用Executor来代替更加灵活。

 

线程池
     线程池指管理一组同构工作线程的资源池,线程池是与工作队列密切相关的,在工作队列中保存了所有等待执行的任务,工作者线程的任务很简单:从工作队列中获取一个任务,执行任务,然后返回线程池并等待下一个任务。“在线程池中执行任务”比“为每个任务分配一个线程”有更大优势,通过重用现有线程,而不是创建新线程,可以在处理多个请求时分摊在线程创建和销毁过程中产生的巨大的开销,另外,当请求到达时,工作线程已经存在,因此不会由于等待创建线程而延迟任务的执行,从而提高响应性,通过调整线程池的大小,可以创建足够多的线程以便使处理器保持忙碌的状态,同时还可以防止过多的线程相互竞争资源而应用程序耗尽内存。
 
无限制创建线程的不足
1、线程生命周期的开销非常高。线程的创建也销毁并不是没有代价的,根据平台的不同实际开销也不同,但线程的创建过程都需要时间,延迟请求的处理,并且需要JVM和操作系统提供一些辅助操作。
2、资源消耗。活跃的线程会消耗系统资源,特别是内存,如果可以运行的线程数量多于可用的处理器数量,那么有些线程就会闲置,大量的闲置线程就会占用很多的内存,如果你已经有足够多的线程使处理器保持忙碌状态,那么创建更多的线程反而会降低性能。
3、稳定性。在可创建线程的数量上存在一个限制,不同平台不同,而且受多个因素制约,包括JVM启动参数、Thread构造函数中请求的栈大小,以及底层操作系统对线程的限制等,如果破坏了这些限制将抛出OutOfMemoryError异常。
 
Executor的生命周期
为了解决执行服务的生命周期问题,ExecutorService扩展了Executor接口,添加了一些用于生命周期的管理方法,下面代码为ExecutorService接口的定义:
 
public interface ExecutorService extends Executor {
    void shutdown();
    List<Runnable> shutdownNow();
    boolean isShutdown();
    boolean isTerminated();
    boolean awaitTermination(long timeout, TimeUnit unit)
        throws InterruptedException;
    ......
}
 ExecutorService有三种状态:运行、关闭、终止,ExecutorService在初建时属于运行状态,shutdown方法将执行平缓的关闭过程:不再接受新的任务,同时等待已经提交的任务执行完成,包括那些还未开始执行的任务。shotdownNow()方法将粗暴的关闭过程:它将尝试取消所有运行中的任务,并且不再启动队列中尚未开始执行的任务。

 

 

分享到:
评论
1 楼 CB00J 2013-10-16  

相关推荐

    什么是线程?Java中如何创建和管理线程?(java面试题附答案).txt

    通过将 MyRunnable 对象传递给 Thread 类...Executor 框架和线程池:用于管理和调度线程的执行。 通过合理地创建和管理线程,我们可以实现复杂的并发执行逻辑,提高程序的性能和响应能力,并确保线程之间的安全和协调。

    Java基础篇:Executor框架.pdf

    该文档详细记录了Executor框架结构、使用示意图、ThreadPoolExecutor使用示例、线程池原理分析、几种常见线程池(FixedThreadPool、SingleThreadExecutor、CachedThreadPool)的详解以及线程池大小确定等内容

    线程池之Executor框架.docx

    Executor框架主要由3部分组成: ...Executor框架有两个关键类实现了ExecutorService接口(ThreadPoolExecutor和ScheduledThreadPoolExecutor)。 异步计算的结果 。包括Future和实现Future的FutureTask类。

    Java中的Runnable接口最全讲义

    8.2 使用Executor框架创建线程池 8.3 线程池的优势和适用场景 9. 线程中断: 9.1 如何中断线程 9.2 处理中断请求 10. 线程状态: 10.1 线程的生命周期 10.2 如何获取线程状态 11. 线程异常处理: ......

    针对于Executor框架,Java API,线程共享数据

    Executor框架是Java并发编程中的一个重要工具,它提供了一种管理线程池的方式,使得我们可以更方便地管理线程的生命周期和执行线程任务。 原子操作是指不可被中断的操作,要么全部执行成功,要么全部不执行。原子...

    Java并发之线程池Executor框架的深入理解

    主要介绍了Java并发之线程池Executor框架的深入理解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    架构师知识体系.pdf

    目 录;卷首语;目录;热点 | Hot;Node.js 与 io.js 那些事儿;深入解析和反思携程宕机事件;推荐文章|Article序列化和反序列; 高;可用可伸缩架构实用经验谈;...戏(细)说 Executor 框架线程池任务执行全过程(下)

    Java并发Executor框架

    1、Executor框架简介  从JDK5开始,工作单元和执行机制隔离开来,工作单元包括Runnable和Callable,执行机制由Executor提供。  调用关系:Java线程一对一映射到本地操作系统的系统线程,当多线程程序分解若干...

    Java-Executor并发框架.docx

    Java是天生就支持并发的语言,支持并发意味着多线程,线程的频繁创建在高并发及大数据量是非常消耗资源的,因为java提供了线程池。这篇文章主要介绍下并发包下的Executor接口,Executor接口虽然作为一个非常旧的接口...

    java线程池ThreadPoolExecutor类使用详解.docx

    而线程池不允许使用Executors去创建,而要通过ThreadPoolExecutor方式,这一方面是由于jdk中Executor框架虽然提供了如newFixedThreadPool()、newSingleThreadExecutor()、newCachedThreadPool()等创建线程池的方法,...

    Java面试问题带答案40道.docx

    另外,还可以使用Executor框架或线程池来管理线程。 3. Java中什么是抽象类? 答:抽象类是一种不能被实例化的类,只能作为其他类的基类。它可以包含抽象方法,用于定义子类必须实现的方法。 4. Java中什么是接口...

    Java 线程池框架核心代码分析1

    前言多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和资源消耗都是很高的。线程池应运而生,成为我们管理线程的利器。Java 通过 Executor

    Java线程池框架核心代码分析

    Java 通过Executor接口,提供了一种标准的方法将任务的提交过程和执行过程解耦开来,并用Runnable表示任务。  下面,我们来分析一下 Java 线程池框架的实现ThreadPoolExecutor。  下面的分析基于JDK1.7  生命...

    JUC多线程学习个人笔记

    线程池:JUC提供了Executor框架,可以方便地创建和管理线程池,实现任务的异步执行和线程的复用。 并发集合:JUC提供了一些线程安全的集合类,如ConcurrentHashMap、ConcurrentLinkedQueue等,可以在多线程环境下...

    ArtConcurrentBook.rar

    《Java并发编程的艺术》内容涵盖Java并发编程机制的底层实现原理、Java内存模型、Java并发编程基础、Java中的锁、并发容器和框架、原子类、并发工具类、线程池、Executor框架等主题,每个主题都做了深入的讲解,同时...

    《Java并发编程的艺术》

    《Java并发编程的艺术》内容涵盖Java并发编程机制的底层实现原理、Java内存模型、Java并发编程基础、Java中的锁、并发容器和框架、原子类、并发工具类、线程池、Executor框架等主题,每个主题都做了深入的讲解,同时...

    Java并发编程的艺术

    , 《Java并发编程的艺术》内容涵盖Java并发编程机制的底层实现原理、Java内存模型、Java并发编程基础、Java中的锁、并发容器和框架、原子类、并发工具类、线程池、Executor框架等主题,每个主题都做了深入的讲解,...

    多线程了解

    java多线程、线程池详细教程,Executor框架的简单介绍。

Global site tag (gtag.js) - Google Analytics