问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

我想知道JAVA多线程中,如何让一个线程去等待N个线程执行完成后,再执行。

发布网友 发布时间:2022-05-15 23:10

我来回答

2个回答

热心网友 时间:2024-02-28 22:20

java.util.concurrent.CountDownLatch 这个类可以实现你所要的功能

例如:CountDownLatch latch = new CountDownLatch(5) //声明计数器为5个
Thread t = new Thread() {
public void run() {
try {
//TODO 你的应用
} catch (Exception e) {
//TODO 异常处理
}
finally {
latch.countDown(); //这句是关键
System.out.println("ok"); //5个线程都跑完后输出
}
}
};
t.start();
然后让以上操作循环五次(就是说同时开5个线程),那么这个"ok"就会在等到这5个线程都ok后才会被输出一次。

热心网友 时间:2024-02-28 22:21

//1.可用ExecutorService+Future来实现,下面这个*了最大并发线程数.也可以不*.
//System.out.println("down");这个位置你可以放那个线程的处理,

//2.用线程锁定也可以.lock<N个线程>unlock lock<线程>unlick

package jp.co.hitachi.jkk.ekarte.hl7.bat;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/**
* バッチ自动実行のスレッド
* @author yuangui
* @see Runnable
* @version 0610-00, 2010/8/25
* @since 0610-00
*/
public class CSBatDEMOThread extends Thread {

public static void main(String[] args) {
Thread t = new CSBatDEMOThread();
t.start();
}

/**
* バッチ自动実行
* @return なし
*/
@Override
public void run() {

// CSBProcLock locker = CSBProcLock.createLocker();
ExecutorService es;
try{
// locker.onStart();

//int cpuNums = Runtime.getRuntime().availableProcessors();
//Process 3 threads in the pool
es = Executors.newFixedThreadPool(10);

List<Future<?>> fs = new ArrayList<Future<?>>();

for (int i = 0; i < 100; i++) {
// TODO : logic > Start

TestTask t = new TestTask();
t.setTaskNo(this.toString() + ": " + i);

// TODO : logic End
Future<?> f = es.submit(t);
fs.add(f);
}

for (Future<?> f: fs) {
f.get();
}

//After all submitted tasks are executed,shut down the ExecutorService
if (es.isTerminated()) {
es.shutdown();
}

System.out.println("down");

} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
// locker.onEnd();
System.gc();
}
}

}

class TestTask implements Runnable{

String taskNo = "";

@Override
public void run() {
// TODO 自动生成されたメソッド・スタブ

Long wt = Math.round(Math.random() * 1000);
try {

Thread.sleep(wt);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}

System.out.println(taskNo + " time:" + wt + "ms");

}

/**
* taskNoを取得します。
* @return taskNo
*/
public String getTaskNo() {
return taskNo;
}

/**
* taskNoを设定します。
* @param taskNo taskNo
*/
public void setTaskNo(String taskNo) {
this.taskNo = taskNo;
}

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
小米电视65寸长宽多少厘米 天津冬天的温度标准是多少度 德国冬天温度是多少度 上海的冬天有多少度 浙江冬季温度是多少度 到了冬季哪些省份城市的气温是零度以上? 羊奶粉不溶解是怎么回事? fit和match和suitable的区别? Fit和 Suitable有什么区别? Fit和 "Suitable"有什么区别? java中如何内部类继承内部类 java 怎么通过hl7获取数据 《秦时明月》中,盖聂和卫庄,哪一个更厉害? 秦时明月盖聂和卫庄在青年时期为什么要敌对? 《秦时明月》之中相对于正派的盖聂,为什么大家更喜欢坏坏的卫庄呢? 天行九歌盖聂卫庄在什么时候最甜? 秦时明月6:盖聂卫庄大战晓梦、掩日,“合纵连横”再现,你怎么看? 秦时明月6:田言一人要大战盖聂+卫庄,她哪来的底气? 盖聂和卫庄都是鬼谷的传人,他们两个的仇恨有多深? 秦时明月世界盖聂和卫庄的关系是什么 卫庄和盖聂是什么关系? 盖聂和卫庄到鬼谷说的第一句话是什么 满血的盖聂卫庄无敌,两人VS“越王八剑”无压力,你怎么看? 秦时明月盖聂和卫庄小时候在一起训练的是第几集?老早之前看的,好像是什么盖聂两个都想救,结果两个人都 不同牌子的速凝剂可以一起使用吗? 莎莎苏的蝴蝶结都能拿下来吗 暖暖的换装物语周年纪念珍藏版的去拍短片怎么过 i heart ugg是ugg吗 暖暖换装物语怎么过《夜幕下的甜蜜回忆2》 很久以前一双天美意的鞋子,大概是2007年吧(记不太清),白色牛皮,圆头有紫色蝴蝶结! 求好的Java开发技术学习方法? cxf webservice抛异常 Unmarshalling Error: 意外的元素 (uri:&quot;http:&quot;, local:&quot;say&quot;)所需元素为&lt;{}say&gt; OXOB,0x1C,OXOD的16进制和10进制的数是多少 买的无线网卡插主机上,搜索不到无线wifi,是怎么回事? 家里的宽带100M 为什么下载速度只有10M?是少给了吗? 为什么宽带测试是100M,下载速度就只有10M都不到,请大侠解答 为什么电信100M宽带 电脑浏览器下载的速度每秒能10M。手机无线网。下载平均每秒才4M。为什么? 海南三亚七星级酒店 海南七星级酒店叫什么名字 三亚七星级酒店投资商是谁 海南三亚七星级酒店,三亚海悦湾度假酒店好不? 鱼籽大家都说要先蒸熟再炒,那蒸多长时间合适 安井鱼籽包煮多久能熟 安井鱼籽包蒸多久能熟 如何蒸鱼籽怎么做好吃 鱼籽蒸成什么样才熟 鱼子怎么煮让它不散开 普通饮料瓶盖子装满水是多少毫升? 5ml是多少? 所有可乐瓶上的升和毫升计量 儿童健康零食有什么?