我在java中编写了一个Web服务器,需要一个任务类来将数据上传到另一个服务器,所以我这样做如下:
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(5)
executor.scheduleAtFixedRate(new Task(), 0, 100, TimeUnit.SECOND);
Task
已实施Runnable
。
问题是,每次只有一个线程被安排运行这个new Task()
,其他人只是空闲,如果大量数据来了,我的工作队列存储数据变得非常大,更糟糕的是,我无法得到另一个服务器中的实时数据。
我的英语太糟糕了,如果你有我的观点我会徘徊,我想找到一种方法来解决这个问题,你能帮助我吗?
答案 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个线程中运行相同的任务)。