0

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

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

TaskRunnable。问题是,每次只安排一个线程运行这个new Task(),其他线程只是空闲,如果有大量数据来,我存储数据的工作队列变得非常大,更糟糕的是,我无法在花药中获取实时数据服务器。我的英语太糟糕了,如果你明白我的意思,我正在徘徊,我想找到解决这个问题的方法,你能帮我吗?

4

2 回答 2

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 个线程内运行相同的任务)。

于 2013-05-06T17:00:20.760 回答
0

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

于 2013-05-06T15:29:01.893 回答