[JAVA]我有一个用例,我想知道接近它的最佳方法。我有以下方式的当前实现(伪代码),但需要花费大量时间来处理:
Func (File) // Called when a file is uploaded
{
1.doSomething()
2.Result=LongRunningTask(File)
3.WriteToFS(Result)
}
现在我要拿出2,& 3并在后台执行它们并快速返回。如果对Func()进行多次调用,它应该逐个队列并执行它们,这样对FS的写入不会受到影响。我应该怎么做呢?
答案 0 :(得分:1)
您可以使用ExecutorService在后台启动任务。 submit
中的ExecutorService
方法接收Callable<T>
并立即返回Future
个对象。您可以使用Future
对象查询操作的进度(无论是已完成还是已取消或仍在运行),并在操作结束后获取操作结果。您可以通过给予ExecutorService
的线程池大小来管理您允许的并发后台操作数量(线程池为1将允许您按照所请求的顺序对后台操作进行排队,但是您可以增加那个数字并允许并发操作。)
查看http://www.nurkiewicz.com/2013/02/javautilconcurrentfuture-basics.html,了解如何使用ExecutorService
和Future
的好例子。
答案 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
找到现在,如果您正在考虑将请求排队到该方法,最简单的方法是同步它。从性能方面来看,它可能不是一个好的解决方案,但它更容易实现。