我在java服务器上有五个线程,我该如何让它们同时运行一个任务?

时间:2013-05-06 15:18:34

标签: java concurrency parallel-processing executors

我在java中编写了一个Web服务器,需要一个任务类来将数据上传到另一个服务器,所以我这样做如下:

ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(5)
executor.scheduleAtFixedRate(new Task(), 0, 100, TimeUnit.SECOND);

Task已实施Runnable。 问题是,每次只有一个线程被安排运行这个new Task(),其他人只是空闲,如果大量数据来了,我的工作队列存储数据变得非常大,更糟糕的是,我无法得到另一个服务器中的实时数据。 我的英语太糟糕了,如果你有我的观点我会徘徊,我想找到一种方法来解决这个问题,你能帮助我吗?

2 个答案:

答案 0 :(得分:0)

要一次运行5个任务,您需要5个任务,这些任务需要足够长的时间才能使用不同的线程。如果添加一个任务,它将使用一个线程。如果添加5个小任务,它们可能都由同一个线程运行。

答案 1 :(得分:0)

你试过这个吗?

ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(5);
Task task=new Task();
executor.scheduleAtFixedRate(task, 0, 100, TimeUnit.SECOND);
executor.scheduleAtFixedRate(task, 0, 100, TimeUnit.SECOND);
executor.scheduleAtFixedRate(task, 0, 100, TimeUnit.SECOND);
executor.scheduleAtFixedRate(task, 0, 100, TimeUnit.SECOND);
executor.scheduleAtFixedRate(task, 0, 100, TimeUnit.SECOND);

以这种方式,您将只有一个任务被安排在5个线程中运行。只需确保你有任务thread safe(因为你将在5个线程中运行相同的任务)。