我有线程x
我就是这样开始的:
ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(() -> {
在x
内,我有CyclicBarrier
另外10个帖子:
final CyclicBarrier _threadGate = new CyclicBarrier(10);
ArrayList<Thread> _threadList = new ArrayList<>();
然后我将线程添加到列表
for (int i = 0; i < 10; i++) {
_threadList.add(new Thread() {
@Override
public void run() {
_threadGate.await();
//long processing code
所以在线程准备好之后我启动它们,它们同时启动很重要(差不多,循环需要时间,即使它是0,01ms):
for (int i = 0; i < _threadList.size(); i++) {
_threadList.get(i).start();
}
现在,主线程x
的结尾是这样的:
}, 0, repeatTimer, TimeUnit.SECONDS);
如果repeatTimer
为300
,则表示它在5分钟后再次启动10个线程。
10个线程完成的时间是一个未知的数量,但它不到5分钟。肯定会在2到4分钟之间。
我想要实现的目标
完成10个线程后,重启X但延迟5秒
为此,我一直在考虑将repeatTimer
值设置为10个线程+ 5秒的时间(我不知道该怎么做,我不知道最后一个线程完成它的任务),但这是正确?还是有另一种方式吗?
答案 0 :(得分:1)
我没有看到在这里/^(\+?!1)?!(8(00|44|55|66|77|88)[2-9]\d{6})$/
if ( phoneNumbers/not().match(/^(\+?1)?(8(00|44|55|66|77|88)[2-9]\d{6})$/) && data.results[i].duration > 90 && data.results[i].disposition === "ANSWERED") {
console.log(phoneNumbers);
}
的必要性。您可以等到所有线程使用CountDownLatch完成其工作。
这是一个简单的例子:
SchedulingExecutorService
在每个线程的最后一个动作中减少锁存器:
while (!stopped) {
CountDownLatch latch = new CountDownLatch(N);
// create and start your threads
latch.await(); // this method blocks until each Thread calls countDown()
// wait here 5 seconds if you want
}