1、ExecutorService:
是一个接口,继承了Executor:
public interface ExecutorService extends Executor {
}
2、Executor:
而Executor亦是一个接口,该接口只包含了一个方法:
void execute(Runnable command);
3、Executors:
该类是一个辅助类,此包中所定义的 Executor、ExecutorService、ScheduledExecutorService、ThreadFactory 和 Callable 类的工厂和实用方法。
此类支持以下各种方法:
• 创建并返回设置有常用配置字符串的 ExecutorService 的方法。
• 创建并返回设置有常用配置字符串的 ScheduledExecutorService 的方法。
• 创建并返回“包装的”ExecutorService 方法,它通过使特定于实现的方法不可访问来禁用重新配置。
• 创建并返回 ThreadFactory 的方法,它可将新创建的线程设置为已知的状态。
• 创建并返回非闭包形式的 Callable 的方法,这样可将其用于需要 Callable 的执行方法中。
4、创建ExecutorService的方法:
创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。
5、ExecutorService的方法:
shutdown
void shutdown()
启动一次顺序关闭,执行以前提交的任务,但不接受新任务。如果已经关闭,则调用没有其他作用。
抛出:
SecurityException
- 如果安全管理器存在并且关闭,此 ExecutorService 可能操作某些不允许调用者修改的线程(因为它没有保持
RuntimePermission
("modifyThread")),或者安全管理器的
checkAccess 方法拒绝访问。
启动一次顺序关闭,执行以前提交的任务,但不接受新任务。如果已经关闭,则调用没有其他作用。
awaitTermination
boolean awaitTermination(longtimeout,
TimeUnitunit)
throws InterruptedException
请求关闭、发生超时或者当前线程中断,无论哪一个首先发生之后,都将导致阻塞,直到所有任务完成执行。
参数:
timeout
- 最长等待时间
unit
- timeout 参数的时间单位
返回:
如果此执行程序终止,则返回 true;如果终止前超时期满,则返回 false
抛出:
InterruptedException
- 如果等待时发生中断
请求关闭、发生超时或者当前线程中断,无论哪一个首先发生之后,都将导致阻塞,直到所有任务完成执行。既是等待所有子线程执行结束。
execute
void execute(Runnablecommand)
在未来某个时间执行给定的命令。该命令可能在新的线程、已入池的线程或者正调用的线程中执行,这由 Executor实现决定。
参数:
command
- 可运行的任务
抛出:
RejectedExecutionException
- 如果不能接受执行此任务。
NullPointerException
- 如果命令为 null
在未来某个时间执行给定的命令。该命令可能在新的线程、已入池的线程或者正调用的线程中执行,这由 Executor 实现决定。
submit
Future<?> submit(Runnabletask)
提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future。该 Future 的 get 方法在成功 完成时将会返回
null。
参数:
task
- 要提交的任务
返回:
表示任务等待完成的 Future
抛出:
RejectedExecutionException
- 如果任务无法安排执行
NullPointerException
- 如果该任务为 null
提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future。该 Future 的 get 方法在成功 完成时将会返回 null。
6、下面是相关的使用例子:
public class ExecutorServiceTest {
public static void main(String[] args) throws IOException, InterruptedException {
ExecutorService service = Executors.newFixedThreadPool(3);
for (int i = 0; i < 10; i++) {
System.out.println("创建线程" + i);
Runnable run = new Runnable() {
@Override
public void run() {
System.out.println("启动线程");
}
};
service.execute(run);
}
service.shutdown();
service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
System.out.println("all thread complete");
}
}
可以发现线程被循环创建,但是启动线程却不是连续的,而是由ExecutorService决定的。
相关推荐
1.newFixedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。`` 2.newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列...
ExecutorService的execute和submit方法
今天小编就为大家分享一篇关于在spring boot中使用java线程池ExecutorService的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
本程序实现了ExecutorService线程池,内置说明txt说明,可以参考
主要为大家详细介绍了java ExecutorService使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
运用JAVA的concurrent.ExecutorService线程池实现socket的TCP和UDP连接
使用Java的ExecutorService类创建了一个固定大小的线程池,并将任务安排到线程池中执行。 通过调用`scheduleTask()`方法,可以指定要执行的任务、延迟时间和延迟时间单位。 任务将在指定的延迟时间后被安排到线程池...
ExecutorService方法案例文件.zip
接口 java.util.concurrent.ExecutorService 表述了异步执行的机制,并且...壹個 ExecutorService 实例因此特别像壹個线程池。事实上,在 java.util.concurrent 包中的 ExecutorService 的实现就是壹個线程池的实现。
运用JAVA的concurrent.ExecutorService线程池实现socket的TCP和UDP连接.doc
在类的构造方法中,首先创建了一个固定大小为5的线程池。然后通过循环提交了10个任务到线程池中执行。每个任务都是一个匿名内部类实现的Runnable接口的实例,其中的run()方法定义了任务的具体逻辑。最后通过调用...
//Runtime的availableProcessors()方法返回当前系统的CPU的数目 //系统的CPU越多,线程池中工作线程的数目也越多 executorService= Executors.newFixedThreadPool( Runtime.getRuntime()....
分别从线程池大小参数的设置、工作线程的创建、空闲线程的回收、阻塞队列的使用、任务拒绝策略、线程池Hook等方面来了解线程池的使用,其中涉及到一些细节包括不同参数、不同队列、不同拒绝策略的选择、产生的影响和...
该组件中,Executor 和 ExecutorService 接口 定义了线程池最核心的几个方法,提交任务 submit ()、关闭线程池 shutdown()。抽象类 AbstractExecutorService 主要对公共行为 submit()系列方法进行了实现,这些 ...
NULL 博文链接:https://x125858805.iteye.com/blog/2191873
ThreadPoolExecutor还有两个常用的方法shutdown和submit,两者都用来关闭线程池, 但是submit有一个结果返回. 线程池任务执行 当执行executor(Runnable command)方法后, 传入一个任务, public void execute...
主要介绍了Java 线程池ExecutorService详解及实例代码的相关资料,线程池减少在创建和销毁线程上所花的时间以及系统资源的开销.如果不使用线程池,有可能造成系统创建大量线程而导致消耗系统内存以及”过度切换
线程池是可以容纳多个线程的容器,程序可以从线程池获取线程来完成目标代码,同时也可以将线程归还给线程池,省去了创建线程和销毁线程这样非常繁琐的操作。 2、线程池的使用 public static ExecutorService ...
batch-renderer -> pdf-batch-rendererA utility for batchly rendering PDF项目说明该项目的目的是批量将HTML转换为PDF文件,底层基于,项目中采用Java多线程框架的Executors创建了一个包含固定数量的线程池来批量...
如果 Future 结果没有完成,调用 get() 方法,程序会 阻塞 在那里,直至获取返回结果 先来看第一种实现方式,假设任务 A 由于参数原因,执行时间相对任务 B,C,D 都要长很多,但是按照程序的执行顺序,程序在 get()...