Java多线程中的Executor详解
Java多线程中的Executor
定义了执行已提交Runnable任务的对象。该接口提供了一种将任务提交与如何运行每个任务的机制(包括线程使用、调度等细节)解耦的方法。它通常使用预先创建线程而不是创建线程。
例如new Thread(new(RunnableTask())).start() 每次都创建新线程来执行任务。
现在可以使用以下方式来执行任务:
Executor executor = anExecutor; executor.execute(new RunnableTask1());
然而,Executor接口并不严格要求异步执行,在一个简易测试中,executor 可以在调用者的线程中立即运行提交的任务:
class DirectExecutor implements Executor {
public void execute(Runnable r) {
//直接执行提交者任务
r.run();
}
}更典型的情况是,任务在调用者的线程之外的某个线程中执行。下面的执行程序为每个任务生成一个新线程。
class ThreadPerTaskExecutor implements Executor {
public void execute(Runnable r) {
//创建新线程来执行任务
new Thread(r).start();
}
}许多Executor实现对如何以及何时调度任务施加了某种限制。下面的执行程序将任务的提交序列化到第二个执行程序,演示了复合执行程序。
class SerialExecutor implements Executor {
final Queue<Runnable> tasks = new ArrayDeque<Runnable>();
final Executor executor;
Runnable active;
SerialExecutor(Executor executor) {
this.executor = executor;
}
public synchronized void execute(final Runnable r) {
//创建一个任务并存放到双端队列
tasks.offer(new Runnable() {
public void run() {
try {
r.run();
} finally {
scheduleNext();
}
}
});
//开启第一个任务
if (active == null) {
scheduleNext();
}
}
protected synchronized void scheduleNext() {
if ((active = tasks.poll()) != null) {
executor.execute(active);
}
}
}ExecutorService接口拓展Executor功能,这是一个更广泛的接口。
ThreadPoolExecutor类提供可扩展的线程池实现。
Executors类提供了方便的工厂方法。
内存一致性效应:在将可运行对象提交给执行程序之前发生的线程操作——在它开始执行之前,可能在另一个线程中。
到此这篇关于Java多线程中的Executor详解的文章就介绍到这了,更多相关Java的Executor内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
http basic authentication通过post方式访问api示例分享 basic认证示例
在HTTP中,基本认证是一种用来允许Web浏览器或其他客户端程序在请求时提供以用户名和口令形式的凭证,这篇文章主要介绍了http basic authentication通过post方式访问api示例,大家参考使用吧2014-01-01
浅谈SpringMVC中Interceptor和Filter区别
这篇文章主要介绍了浅谈SpringMVC中Interceptor和Filter区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-04-04
浅谈一下SpringCloud中Hystrix服务熔断和降级原理
这篇文章主要介绍了浅谈一下SpringCloud中Hystrix服务熔断和降级原理,Hystrix 是 Netflix 的一款开源的容错框架,通过服务隔离来避免由于依赖延迟、异常,引起资源耗尽导致系统不可用的解决方案,需要的朋友可以参考下2023-05-05


最新评论