我有一个java.util.BlockingQueue
,其中包含需要由ExecutorService
提供服务的POJO。此队列必须由单个线程提供服务,但将立即从多个线程推送到该队列。
在过去,我写的解决方案看起来有点像这样,但我真的很鄙视它:
executorService.execute(new Runnable() {
@Override
public void run() {
while (true) {
try {
POJO job = blockingQueue.take();
servicePOJO(job);
} catch (InterruptedException e) {
break;
}
}
}
});
有没有更好的方式来写这个,或者这是最好的方式吗?我不喜欢这样做的原因是因为如果我需要添加多个使用者,我需要在一个具有实际线程池大小的循环中运行上面的内容。
答案 0 :(得分:0)
我会将ExecutorService与每个对象的任务一起使用。
public <POJO> void asyncServicePOJO(final POJO pojo) {
executorService.execute(new Runnable() {
@Override
public void run() {
servicePOJO(pojo);
}
});
}
不需要额外的队列。