- 浏览: 83219 次
- 性别:
- 来自: 广州
文章分类
最新评论
Executors
java.util.concurrent
类<wbr></wbr>Executors<wbr style="line-height:25px"><br style="line-height:25px"> java.lang.Object<br style="line-height:25px"> 继承者java.util.concurrent.Executors<br style="line-height:25px"> 此类是个<wbr style="line-height:25px"><span style="color:#003366; line-height:25px">工具类</span><wbr style="line-height:25px">,它提供对<span style="color:#0000ff; line-height:25px">Executor、ExecutorService、ScheduledExecutorService、ThreadFactory</span>和<span style="color:#0000ff; line-height:25px">Callable</span>类的一些实用方法。<br style="line-height:25px"> 此类支持以下<wbr style="line-height:25px"><span style="color:#003366; line-height:25px">各种方法</span><wbr style="line-height:25px">:<br style="line-height:25px"><span style="color:#000080; line-height:25px">*创建并返回设置有常用配置的</span><span style="color:#ff9900; line-height:25px">ExecutorService</span><span style="color:#000080; line-height:25px">的方法。<br> *创建并返回设置有常用配置的</span><span style="color:#ff6600; line-height:25px">ScheduledExecutorService</span><span style="color:#000080; line-height:25px">的方法。<br> *创建并返回“包装的”</span><span style="color:#339966; line-height:25px">ExecutorService</span><span style="color:#000080; line-height:25px">方法,它使特定于实现的方法不可访问,只让</span><span style="color:#008000; line-height:25px">ExecutorService</span><span style="color:#000080; line-height:25px">接口的方法可用。<br> *创建并返回</span><span style="color:#ff9900; line-height:25px">ThreadFactory</span><span style="color:#000080; line-height:25px">的方法,它可将新创建的线程设置为已知的状态。<br> *创建并返回非闭包形式的</span><span style="color:#ff9900; line-height:25px">Callable</span><span style="color:#000080; line-height:25px">的方法,这样可将其用于需要Callable的执行方法中。</span><br style="line-height:25px"> 主要方法:<br style="line-height:25px"><wbr style="line-height:25px">publicstaticExecutorService<span style="line-height:25px"></span><span style="color:#ff00ff; line-height:25px">newFixedThreadPool(intnThreads)</span><wbr style="line-height:25px"><br style="line-height:25px"> 创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。<br style="line-height:25px"> 在任意点,在大多数nThreads线程会处于处理任务的活动状态。如果在所有线程处于活动状态时提交附加任务,<br style="line-height:25px"> 则在有可用线程之前,附加任务将在队列中等待。如果在关闭前的执行期间由于失败而导致任何线程终止,<br style="line-height:25px"> 那么一个新线程将代替它执行后续的任务(如果需要)。在某个线程被显式地关闭之前,池中的线程将一直存在。<br style="line-height:25px"> 参数:<br style="line-height:25px"> nThreads-池中的线程数<br style="line-height:25px"> 返回:<br style="line-height:25px"> 新创建的线程池<br style="line-height:25px"> 抛出:<br style="line-height:25px"> IllegalArgumentException-如果nThreads<=0<br style="line-height:25px"><span style="line-height:25px"><wbr>注意</wbr></span><wbr style="line-height:25px">:它的全是core线程。其<wbr style="line-height:25px"><span style="color:#000080; line-height:25px">源码</span><wbr style="line-height:25px">如下:<br style="line-height:25px"><span style="color:#993300; line-height:25px">returnnew</span><span style="color:#0000ff; line-height:25px">ThreadPoolExecutor(nThreads,nThreads,0L,TimeUnit.MILLISECONDS,newLinkedBlockingQueue<Runnable>());</span><br style="line-height:25px"><wbr style="line-height:25px"><span style="color:#993300; line-height:25px">publicstatic</span><span style="line-height:25px"></span>ExecutorService<span style="color:#ff6600; line-height:25px">newFixedThreadPool</span>(intnThreads,ThreadFactorythreadFactory)<wbr style="line-height:25px"><br style="line-height:25px"> 创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程,在需要时使用提供的ThreadFactory创建新线程。在任意点,在大多数nThreads线程会处于处理任务的活动状态。如果在所有线程处于活动状态时提交附加任务,则在有可用线程之前,附加任务将在队列中等待。如果在关闭前的执行期间由于失败而导致任何线程终止,那么一个新线程将代替它执行后续的任务(如果需要)。在某个线程被显式地关闭之前,池中的线程将一直存在。<br style="line-height:25px"> 参数:<br style="line-height:25px"> nThreads-池中的线程数<br style="line-height:25px"> threadFactory-创建新线程时使用的工厂<br style="line-height:25px"> 返回:<br style="line-height:25px"> 新创建的线程池<br style="line-height:25px"> 抛出:<br style="line-height:25px"> NullPointerException-如果threadFactory为null<br style="line-height:25px"> IllegalArgumentException-如果nThreads<=0<br style="line-height:25px"><wbr style="line-height:25px"><span style="color:#993300; line-height:25px">publicstatic</span>ExecutorService<span style="line-height:25px"></span><span style="color:#ff6600; line-height:25px">newSingleThreadExecutor()</span><wbr style="line-height:25px"><br style="line-height:25px"> 创建一个使用单个worker线程的Executor,以无界队列方式来运行该线程。<br style="line-height:25px"> (注意,如果因为在关闭前的执行期间出现失败而终止了此单个线程,那么如果需要,一个新线程将代替它执行后续的任务)。<br style="line-height:25px"> 可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。<br style="line-height:25px"> 与其他等效的newFixedThreadPool(1)不同,可保证不能对ThreadPoolExecutor重新进行配置来使用更多的线程。<br style="line-height:25px"> 返回:<br style="line-height:25px"> 新创建的单线程Executor<br style="line-height:25px"><span style="line-height:25px"><wbr>注意</wbr></span><wbr style="line-height:25px">1:<span style="color:#339966; line-height:25px">newSingleThreadExecutor</span><span style="color:#000080; line-height:25px">与</span><span style="color:#008000; line-height:25px">newFixedThreadPool(</span><span style="color:#ff6600; line-height:25px">1</span><span style="color:#008000; line-height:25px">)</span><span style="color:#000080; line-height:25px">不同之出在于:<br> newSingleThreadExecutor返回的ExcutorService在析构函数finalize()会调用shutdown(),即如果我们没有对它调用shutdown(),那么可以确保它在被回收时调用shutdown()来终止线程。</span><br style="line-height:25px"><span style="line-height:25px"><wbr>注意</wbr></span><wbr style="line-height:25px">2:源码如下:<br style="line-height:25px"><span style="color:#0000ff; line-height:25px"></span><span style="color:#993300; line-height:25px">publicstatic</span><span style="color:#0000ff; line-height:25px">ExecutorService</span><span style="color:#ff6600; line-height:25px">newSingleThreadExecutor</span><span style="color:#0000ff; line-height:25px">(){<br> returnnewFinalizableDelegatedExecutorService<br> (newThreadPoolExecutor(1,1,0L,TimeUnit.MILLISECONDS,newLinkedBlockingQueue<Runnable>()));<br> }</span><br style="line-height:25px"><wbr style="line-height:25px"><span style="color:#993300; line-height:25px">publicstatic</span><span style="line-height:25px"></span>ExecutorService<span style="color:#339966; line-height:25px"></span><span style="color:#ff6600; line-height:25px">newSingleThreadExecutor</span><span style="color:#339966; line-height:25px">(</span>ThreadFactorythreadFactory)<wbr style="line-height:25px"><br style="line-height:25px"> 创建一个使用单个worker线程的Executor,以无界队列方式来运行该线程,并在需要时使用提供的ThreadFactory创建新线程。与其他等效的newFixedThreadPool(1,threadFactory)不同,可保证不能对ThreadPoolExecutor重新进行配置来使用更多的线程。<br style="line-height:25px"> 参数:<br style="line-height:25px"> threadFactory-创建新线程时使用的工厂<br style="line-height:25px"> 返回:<br style="line-height:25px"> 新创建的单线程Executor<br style="line-height:25px"> 抛出:<br style="line-height:25px"> NullPointerException-如果threadFactory为null <div style="line-height:25px">注意:<span style="color:rgb(0,0,128)">newSingleThreadExecutor返回的ExcutorService在析构函数finalize()会调用shutdown(),即如果我们没有对它调用shutdown(),那么可以确保它在被回收时调用shutdown()来终止线程。</span> </div> <div style="line-height:25px"><wbr><span style="color:rgb(153,51,0)">publicstatic</span>ExecutorService<span style="color:rgb(255,102,0)">newCachedThreadPool()</span><wbr><br> 创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,<br> 这些线程池通常可提高程序性能。调用execute将重用以前构造的线程(如果线程可用)。<br> 如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有60秒钟未被使用的线程。<br> 因此,长时间保持空闲的线程池不会使用任何资源。<br> 注意,可以使用ThreadPoolExecutor构造方法创建具有类似属性但细节不同(例如超时参数)的线程池。<br> 返回:<br> 新创建的线程池<br><wbr>注意<wbr>1:它没有core线程。源码如下:<br><span style="color:rgb(0,0,255)"></span><span style="color:rgb(153,51,0)">publicstatic</span><span style="color:rgb(0,0,255)">ExecutorService</span><span style="color:rgb(255,102,0)">newCachedThreadPool()</span><span style="color:rgb(0,0,255)">{</span></wbr></wbr></wbr></wbr></div> <div style="line-height:25px"> <span style="color:rgb(153,51,0)">returnnew</span><span style="color:rgb(0,0,255)">ThreadPoolExecutor(</span><span style="color:rgb(51,153,102)">0</span><span style="color:rgb(0,0,255)">,</span><span style="color:rgb(0,128,0)">Integer.MAX_VALUE</span><span style="color:rgb(0,0,255)">,60L,TimeUnit.SECONDS,newSynchronousQueue<Runnable>());<br> }</span><br><wbr><span style="color:rgb(153,51,0)">publicstatic</span>ExecutorService<span style="color:rgb(255,102,0)">newCachedThreadPool</span>(ThreadFactorythreadFactory)<wbr><br> 创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们,并在需要时使用提供的ThreadFactory创建新线程。<br> 参数:<br> threadFactory-创建新线程时使用的工厂<br> 返回:<br> 新创建的线程池<br> 抛出:<br> NullPointerException-如果threadFactory为null<br><wbr><span style="color:rgb(153,51,0)">publicstatic</span>ScheduledExecutorService<span style="color:rgb(255,102,0)">newSingleThreadScheduledExecutor()</span><wbr><br> 创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。<br> (注意,如果因为在关闭前的执行期间出现失败而终止了此单个线程,那么如果需要,一个新线程会代替它执行后续的任务)。<br> 可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。<br> 与其他等效的newScheduledThreadPool(1)不同,可保证不能对ScheduledThreadPoolExecutor重新进行配置来使用更多的线程。<br> 返回:<br> 新创建的安排执行程序<br><wbr>注意<wbr>1:<span style="color:rgb(0,0,128)">newSingleThreadScheduledExecutor与newScheduledThreadPool(1)不同之出在于:<br> newSingleThreadScheduledExecutor在析构函数finalize()会调用shutdown(),即如果我们没有对它调用shutdown(),那么可以确保它在被回收时调用shutdown()来终止线程</span>。<br><wbr>源码如下<wbr>:<span style="color:rgb(153,51,0)">publicstatic</span><span style="color:rgb(0,0,255)">ScheduledExecutorService</span><span style="color:rgb(255,102,0)">newSingleThreadScheduledExecutor()</span><span style="color:rgb(0,0,255)">{<br> returnnewDelegatedScheduledExecutorService<br> (newScheduledThreadPoolExecutor(1));</span><br> }<br><wbr>注意<wbr>2:这里的<span style="color:rgb(0,0,128)">ScheduledThreadPoolExecutor是core线程固定,且只有core线程,它的队列是无界的。</span><br><span style="color:rgb(153,51,0)">publicstatic</span>ScheduledExecutorService<span style="color:rgb(255,102,0)">newSingleThreadScheduledExecutor</span>(ThreadFactorythreadFactory)<br> 创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。<br> (注意,如果因为在关闭前的执行期间出现失败而终止了此单个线程,那么如果需要,一个新线程会代替它执行后续的任务)。<br> 可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。与其他等效的newScheduledThreadPool(1,threadFactory)不同,可保证不能对ScheduledThreadPoolExecutor重新进行配置来使用更多的线程。<br> 参数:<br> threadFactory-创建新线程时使用的工厂<br> 返回:<br> 新创建的安排执行程序<br> 抛出:<br> NullPointerException-如果threadFactory为null<br><wbr><span style="color:rgb(153,51,0)">publicstatic</span>ScheduledExecutorService<span style="color:rgb(255,102,0)">newScheduledThreadPool</span>(intcorePoolSize)<wbr><br> 创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。<br> 参数:<br> corePoolSize-池中所保存的线程数,即使线程是空闲的也包括在内。<br> 返回:<br> 新创建的安排线程池<br> 抛出:<br> NullPointerException-如果threadFactory为null<br><wbr><span style="color:rgb(153,51,0)">publicstatic</span>ScheduledExecutorService<span style="color:rgb(255,102,0)">newScheduledThreadPool</span>(intcorePoolSize,ThreadFactorythreadFactory)<wbr><br> 创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。<br> 参数:<br> corePoolSize-池中所保存的线程数,即使线程是空闲的也包括在内<br> threadFactory-执行程序创建新线程时使用的工厂<br> 返回:<br> 新创建的安排线程池<br> 抛出:<br> IllegalArgumentException-如果corePoolSize<0<br> NullPointerException-如果threadFactory为null<br><wbr><span style="color:rgb(153,51,0)">publicstatic</span>ExecutorService<span style="color:rgb(255,102,0)">unconfigurableExecutorService</span>(ExecutorServiceexecutor)<wbr><br> 返回一个将所有已定义的ExecutorService方法委托给指定执行程序的对象,这样就无法使用强制转换来访问其他的方法。<br> 这提供了一种可安全地“冻结”配置并且不允许调整给定具体实现的方法。<br> 参数:<br> executor-底层实现<br> 返回:<br> 一个ExecutorService实例<br> 抛出:<br> NullPointerException-如果executor为null<br><wbr>注意:它的目的是只暴露ExecutorService接口方法,使特定于实现的方法不可访问。它是通过一个类来包装executor来实现的,该类实现了ExecutorService接口。具体来说只是调用executor的相应函数。具体可以查阅源码。<br><wbr><span style="color:rgb(153,51,0)">publicstatic</span>ScheduledExecutorService<span style="color:rgb(255,102,0)">unconfigurableScheduledExecutorService</span>(ScheduledExecutorServiceexecutor)<wbr><br> 返回一个将所有已定义的ExecutorService方法委托给指定执行程序的对象,这样就无法使用强制转换来访问其他的方法。。这提供了一种可安全地“冻结”配置并且不允许调整给定具体实现的方法。<br> 参数:<br> executor-底层实现<br> 返回:<br> 一个ScheduledExecutorService实例<br> 抛出:<br> NullPointerException-如果executor为null<br><wbr>注意<wbr>:其目的和unconfigurableExecutorService相似。<br><span style="color:rgb(153,51,0)">publicstatic</span>ThreadFactory<wbr><span style="color:rgb(255,102,0)">defaultThreadFactory<wbr>()</wbr></span><br> 返回用于创建新线程的默认线程工厂。此工厂创建同一ThreadGroup中Executor使用的所有新线程。<br> 如果有SecurityManager,则它使用System.getSecurityManager()组来调用此defaultThreadFactory方法,其他情况则使用线程组。<br> 每个新线程都作为非守护程序而创建,并且具有设置为Thread.NORM_PRIORITY中较小者的优先级以及线程组中允许的最大优先级。<br> 新线程具有可通过pool-N-thread-M的Thread.getName()来访问的名称,其中N是此工厂的序列号,M是此工厂所创建线程的序列号。<br> 返回:<br> 线程工厂<br><span style="color:rgb(153,51,0)">publicstatic</span>ThreadFactory<span style="color:rgb(255,102,0)"><wbr>privilegedThreadFactory<wbr>()</wbr></wbr></span><br> 返回用于创建新线程的线程工厂,这些新线程与当前线程具有相同的权限。此工厂创建具有与defaultThreadFactory()相同设置的线程,<br> 新线程的AccessControlContext和contextClassLoader的其他设置与调用此privilegedThreadFactory方法的线程相同。可以在AccessController.doPrivileged(java.security.PrivilegedAction)操作中创建一个新privilegedThreadFactory,设置当前线程的访问控制上下文,以便创建具有该操作中保持的所选权限的线程。<br><wbr>注意<wbr>,虽然运行在此类线程中的任务具有与当前线程相同的访问控制和类加载器,但是它们无需具有相同的ThreadLocal<br> 或InheritableThreadLocal值。如有必要,使用ThreadPoolExecutor.beforeExecute(java.lang.Thread,java.lang.Runnable)<br> 在ThreadPoolExecutor子类中运行任何任务前,可以设置或重置线程局部变量的特定值。<br> 另外,如果必须初始化worker线程,以具有与某些其他指定线程相同的InheritableThreadLocal设置,<br> 则可以在线程等待和服务创建请求的环境中创建自定义的ThreadFactory,而不是继承其值。<br> 返回:<br> 线程工厂<br> 抛出:<br> AccessControlException-如果当前访问控制上下文没有获取和设置上下文类加载器的权限。<br><span style="color:rgb(153,51,0)">publicstatic</span><T>Callable<T><span style="color:rgb(255,102,0)"><wbr>callable</wbr></span><wbr>(Runnabletask,Tresult)<br> 返回Callable对象,调用它时可运行给定的任务并返回给定的结果。这在把需要Callable的方法应用到其他无结果的操作时很有用。<br> 参数:<br> task-要运行的任务<br> result-返回的结果<br> 返回:<br> 一个callable对象<br> 抛出:<br> NullPointerException-如果task为null<br><span style="color:rgb(153,51,0)">publicstatic</span>Callable<Object><wbr><span style="color:rgb(255,102,0)">callable</span><wbr>(Runnabletask)<br> 返回Callable对象,调用它时可运行给定的任务并返回null。<br> 参数:<br> task-要运行的任务<br> 返回:<br> 一个callable对象<br> 抛出:<br> NullPointerException-如果task为null<br><span style="color:rgb(153,51,0)">publicstatic</span>Callable<Object><span style="color:rgb(255,102,0)"><wbr>callable</wbr></span><wbr>(PrivilegedAction<?>action)<br> 返回Callable对象,调用它时可运行给定特权的操作并返回其结果。<br> 参数:<br> action-要运行的特权操作<br> 返回:<br> 一个callable对象<br> 抛出:<br> NullPointerException-如果action为null</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr> </div> </wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
相关推荐
Java中Executors类中几种创建各类型线程池方法及简单实例
【Executor、Executors和ExecutorService详解】 在Java并发编程中,`Executor`、`Executors`和`ExecutorService`是核心组件,它们帮助开发者高效管理线程资源,提高程序的并发性能。理解这三个概念的区别和用途是...
java线程池Executors实现数据批量操作。 批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。 2.数据批量导出。 3任务数据异步执行。 4.多线程...
Java中的线程池Executors java中的线程池Executors是Java并发编程中的一种重要概念,它提供了一种高效、灵活的线程管理机制。使用线程池可以降低资源消耗,提高响应速度,提高线程的可管理性。 线程池的优点 1. ...
java Executors 使用实例 concurrent.ExecutorService
顶层接口Executors详解 Executors框架是Java语言中用于异步执行任务的高级接口,旨在提供一个高效、灵活、可扩展的任务执行机制。该框架提供了一个两级调度模型,第一级是用户级的调度器,第二级是操作系统内核的...
《深入解析Java Executors源码》 在Java多线程编程中,`java.util.concurrent.Executors`类扮演着至关重要的角色。它提供了一系列静态工厂方法,用于创建和管理线程池,以及与之相关的ExecutorService、...
### Java线程池管理类:Executors_ #### 概述 `java.util.concurrent.Executors` 是Java并发编程中一个非常重要的工具类,主要用于创建不同类型的线程池对象。通过使用`Executors`类,开发者可以方便地管理和控制...
标题 "C++ library for executors.zip" 暗示了一个关于C++编程的库,它专注于执行器(executors)的概念。执行器是C++并发编程中的一个重要组件,它们负责调度和执行任务,有助于管理线程和资源。在这个库中,可能...
《PyPI官网下载 | more_executors-2.5.1-py2.py3-none-any.whl》 在Python的世界里,PyPI(Python Package Index)是最重要的资源库,它为全球的开发者提供了一个集中地来发布、分享和安装Python软件包。这个资源...
Java提供了一套强大的并发工具,其中`java.util.concurrent.Executors`类是核心部分,它允许我们创建和管理线程池,极大地简化了并发编程。本篇将深入探讨`Executors`类的使用方法及其背后的并发原理。 `Executors`...
《PyPI官网下载:more_executors-1.1.0-py2.py3-none-any.whl》 在Python的世界里,PyPI(Python Package Index)是官方的第三方库仓库,它为开发者提供了一个集中地来发布、搜索和下载Python软件包。本资源“more_...
Java并发编程中的Executor、Executors和ExecutorService是Java并发编程框架的重要组成部分,它们为开发者提供了高效管理和控制线程执行的工具。以下是对这些概念的详细解释: 1. Executor: Executor是一个接口,它...
NULL 博文链接:https://bijian1013.iteye.com/blog/2284676
Java 中 Executor, ExecutorService 和 Executors 的不同 Java 中的 Executor, ExecutorService 和 Executors 是 Java Executor 框架的重要组件,用于提供线程池的功能。在 Java 1.5 之后,Executor 框架提供了多种...
Java并发编程中,`java.util.concurrent.Executors` 类是一个至关重要的工具类,它提供了一系列静态方法,用于创建和管理线程池以及相关的线程执行服务。`Executors` 类简化了线程池的创建和线程的调度,使得开发者...
Executors类的基本用法 2.1 创建线程池 2.2 提交任务 2.3 关闭线程池 线程池的分类 3.1 FixedThreadPool 3.2 CachedThreadPool 3.3 ScheduledThreadPool 3.4 SingleThreadExecutor 3.5 WorkStealingPool 线程池的...
【强制】线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。 说明:Executors返回的线程池对象的弊端如下: 1) ...
资源分类:Python库 所属语言:Python 资源全名:more-executors-1.19.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059