2014-10-27 70 views
0

我有一个file upload功能,其中用户可以在同一时间上传多发的文件,为良好的结果,我用Thread processing这样Java的有效执行线程

Thread.start{ 
    // do file processing 'cause it is a long running process 
} 

现在的问题是,每个文件上传system将创建一个new Thread,这将导致系统抖动和其他问题,所以现在我正在寻找一个解决方案,我可以创建一个Queue来存储所有接收到的文件,并创建Thread的最小编号(say 5 nos)并对其进行处理并再次创建一组Thread和进程。

所以对于我期待到GParsJava Thread and Queue很快,但不知道这是有效的方法,什么是业已存在的良好解决方案

+2

你已开始重新实现'ExecutorService'。也许现在可以切换到一个准备就绪的实施? – 2014-10-27 12:01:51

+0

只需创建一个BlockingQueue类型的对象和5个有权访问该队列的对象,并在循环中调用queue.take()。没问题。你试过什么了? – 2014-10-27 13:23:28

回答

2

你正在寻找一个线程池或者 - 在Java术语 - 一个Executor

Executor executor = anExecutor(); 
executor.execute(aRunnable()); 

的方法anExecutor应该返回一个新的Executor实例:

Executor anExecutor() { 
    return Executors.newFixedThreadPool(42); // just an example ... 
} 
+0

根据'executor'文档“通常使用Executor而不是显式创建线程”。但我的问题是创建一个存储所有请求文件的队列,并将其提供给'thread'进程。 – 2014-10-27 13:00:58

+0

@Suganthan为什么不简单地将所有任务添加到执行器?它内部处理所有这些任务,如队列。如果您需要对执行程序进行更多控制,请改为使用['ExecutorService'](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html)。 Executors中的工厂方法返回这样的ExecutorService。 – Seelenvirtuose 2014-10-27 13:28:45

+0

可能是我在'Java Thread'中的知识还不够,但是我没有明确的想法,我正在制定一些java示例来获得清晰的想法,请允许我尝试 – 2014-10-27 13:36:52