Java异步方法调用/后台处理

时间:2014-07-17 12:38:59

标签: java multithreading concurrency blockingqueue

[JAVA]我有一个用例,我想知道接近它的最佳方法。我有以下方式的当前实现(伪代码),但需要花费大量时间来处理:

Func (File) // Called when a file is uploaded
{

    1.doSomething()
    2.Result=LongRunningTask(File)
    3.WriteToFS(Result)

}

现在我要拿出2,& 3并在后台执行它们并快速返回。如果对Func()进行多次调用,它应该逐个队列并执行它们,这样对FS的写入不会受到影响。我应该怎么做呢?

2 个答案:

答案 0 :(得分:1)

您可以使用ExecutorService在后台启动任务。 submit中的ExecutorService方法接收Callable<T>并立即返回Future个对象。您可以使用Future对象查询操作的进度(无论是已完成还是已取消或仍在运行),并在操作结束后获取操作结果。您可以通过给予ExecutorService的线程池大小来管理您允许的并发后台操作数量(线程池为1将允许您按照所请求的顺序对后台操作进行排队,但是您可以增加那个数字并允许并发操作。)

查看http://www.nurkiewicz.com/2013/02/javautilconcurrentfuture-basics.html,了解如何使用ExecutorServiceFuture的好例子。

答案 1 :(得分:0)

我不确定我是否正确理解了你的问题。如果您关注的是如何执行2&amp; 3异步,您可以在http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html查看ExecutorService接口 有关executorService的优秀教程可以在http://tutorials.jenkov.com/java-util-concurrent/executorservice.html

找到

现在,如果您正在考虑将请求排队到该方法,最简单的方法是同步它。从性能方面来看,它可能不是一个好的解决方案,但它更容易实现。

相关问题