0

我有一个java.util.BlockingQueue充满 POJO,需要由ExecutorService. 此队列必须由单个线程提供服务,但会同时从多个线程推送。

过去,我写的解决方案看起来有点像这样,但我真的很鄙视它:

executorService.execute(new Runnable() {

    @Override
    public void run() {
        while (true) {
            try {
                POJO job = blockingQueue.take();
                servicePOJO(job);
            } catch (InterruptedException e) {
                break;
            }
        }
    }
});

有没有更好的方法来写这个,或者这是最好的方法?我不喜欢这样做的原因是,如果我需要添加多个消费者,我需要以实际线程池的大小在循环中运行上述内容。

4

1 回答 1

0

我会将 ExecutorService 与每个对象的任务一起使用。

public <POJO> void asyncServicePOJO(final POJO pojo) {
    executorService.execute(new Runnable() {
        @Override
        public void run() {
            servicePOJO(pojo);
        }
    });
}

不需要额外的队列。

于 2012-08-11T06:35:10.117 回答