java如何同时执行多个任务,多个执行程序任务通知master完成了?

我正在使用Java Actuator 来并行地划分和处理给定的任务 . 可以有任意数量的任务 . 它们都在开头排队,主控制器对象只是等待所有这些完成 .

我遇到的问题是如何确定所有任务何时完成 . 由于一个大任务只是一次排队(即所有当前排队的任务都属于同一个主任务),我可以使用 getCompletedTaskCount() 方法将已完成任务的数量与最初排队的任务数量进行比较 .

但是,这要求我不断地向执行人员查询已完成任务的数量,我认为这不是一个很好的解决方案 .

while (pool.getCompletedTaskCount() - start_count < num_tasks)

{

try

{

Thread.sleep(30);

}

catch (InterruptedException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

}

我想有一个计数器对象,每个任务可以递增,然后如果计数等于预期任务的数量通知主线程 . 像这样的东西(忽略一些不完整的代码,如缺少异常处理程序等):

主线程:

counter_object.expected_count = num_tasks;

counter_object.count = 0;

queue_tasks();

synchronized(counter_object)

{

counter_object.wait();

}

// all tasks have finished

Worker 任务:

// ...do task

// task finished, update counter

synchronized(counter_object)

{

++counter_object.count;

if(counter_object.count == counter_object.expected_count)

{

// all tasks have finished, notify master thread

counter_object.notify();

}

}

此方法还有一个额外的好处,即我可以使用单个执行程序来运行多个主任务,因为计数器对象对于给定的主服务器是本地的 .

有没有更好的方法来解决这个问题?任务的数量可能会大于允许执行程序创建的最大线程数,因此我认为CyclicBarrier不会起作用 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值