completablefuture与exectorservice.submit()

slmsl1lt  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(139)
public static CompletableFuture<Void> runAsync(Runnable runnable,
                                               Executor executor)

返回一个新的completablefuture,该Future由在给定执行器中运行的任务在运行给定操作后异步完成。

public static ExecutorService newSingleThreadExecutor()

任务保证按顺序执行,并且在任何给定时间都不会有多个任务处于活动状态
我想使用completablefuture来避免使用blocking.get()方法,但我不确定completablefuture是否可以做到这一点:
任务保证按顺序执行,并且在任何给定时间都不会有多个任务处于活动状态
通过传递它 newSingleThreadExecutor() . i、 e可以在将来使用executorservice的submit()方法来完成,如果没有的话,上面的行为仍然可以保证,因为我们将它传递给只使用一个线程的executor。
为了进一步澄清这个问题:

public static ExecutorService newSingleThreadExecutor() {
    return new FinalizableDelegatedExecutorService
        (new ThreadPoolExecutor(1, 1,
                                0L, TimeUnit.MILLISECONDS,
                                new LinkedBlockingQueue<Runnable>()));
}

通过 newSingleThreadExecutor() 即使只调用execute()方法,这是否仍会导致将任务放入 LinkedBlockingQueue 或者该任务将从另一个线程执行?
为什么我需要这个:
我正在写一个文件,这个写应该是异步执行的,但是如果写任务已经在运行,那么就不应该开始另一次写尝试,也不应该在文件被写的时候读取它。
所以如果有人调用一个方法 readThisObjectFromFile(filename); 它应该返回completablefuture对象(这里我必须使用 supplyAsync 方法),以便他们可以进一步 thenApply 而不是使用 .get() 方法,从而阻塞主线程。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题