java 消费者生产模式_Java中的 生产环境 者/消费者模式

我正在考虑如何在Java中实现 生产环境 者/消费者模式 .

假设我有3个线程和一个包含任务的List(比如它是大约5个任务) . 每个线程从列表中获取任务并同时执行它 . 我目前的方法是使用CountDownLatch

int N = 3;

CountDownLatch startSignal = new CountDownLatch(1);

CountDownLatch doneSignal = new CountDownLatch(N);

ConcurrentLinkedQueue tasks = new ConcurrentLinkedQueue();

main() {

for (int i=0;i

new Thread(new Worker()).start();

}

startSignal.countDown();

doneSignal.await();

System.out.println("done");

}

class Worker implements Runnable {

public void run() {

startSignal.await();

while ((s = tasks.poll()) != null) {

// do lengthy task here

if (task failed) {

tasks.add(s);

return; // assume that task fails badly and have to stop the thread

}

}

doneSignal.countDown();

}

}

我想要实现的是,如果一个线程在处理任务时失败,它将被添加回任务列表以便被当前或任何其他线程再次拾取,但是使用我当前使用CountDownLatch的方法显然不可能这样做是因为在调用doneSignal.countDown()之后,该线程假定它已经完成了任务 .

这种情况的最佳方法是什么?是使用Executor的唯一方法吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值