java里面在主线程产生多个子线程,怎么让这些子线程同时运行,运行完以后再继续执行主线程?? 如果主线程还在运行,且没有终止子线程,子线程运行完之后,是不...

java\u5e76\u53d1\u5982\u4f55\u7b49\u5f85\u591a\u4e2a\u7ebf\u7a0b\u6267\u884c\u5b8c\u6210\u540e\u518d\u7ee7\u7eed

thread.Join\u628a\u6307\u5b9a\u7684\u7ebf\u7a0b\u52a0\u5165\u5230\u5f53\u524d\u7ebf\u7a0b\uff0c\u53ef\u4ee5\u5c06\u4e24\u4e2a\u4ea4\u66ff\u6267\u884c\u7684\u7ebf\u7a0b\u5408\u5e76\u4e3a\u987a\u5e8f\u6267\u884c\u7684\u7ebf\u7a0b\u3002\u6bd4\u5982\u5728\u7ebf\u7a0bB\u4e2d\u8c03\u7528\u4e86\u7ebf\u7a0bA\u7684Join()\u65b9\u6cd5\uff0c\u76f4\u5230\u7ebf\u7a0bA\u6267\u884c\u5b8c\u6bd5\u540e\uff0c\u624d\u4f1a\u7ee7\u7eed\u6267\u884c\u7ebf\u7a0bB\u3002

\u5b50\u7ebf\u7a0b\u7ee7\u7eed\u8fd0\u884c\u8fd9\u662f\u7531\u7a0b\u5e8f\u5458\u81ea\u5df1\u51b3\u5b9a\u7684\uff0c\u4f60\u6ca1\u5199\u5faa\u73af\u8fd0\u884c\u5b50\u7ebf\u7a0b\u8fd0\u884c\u4e00\u904d\u4e5f\u5c31\u7ed3\u675f\u4e86\u3002

package thread;
public class TestJoin {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ThreJo t= new ThreJo("a");
t.start();
ThreJo t2= new ThreJo("b");
t2.start();
try {
t.join();
t2.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("出错了");
return ;
}
for(int i =0;i<50;i++){
System.out.println("调用主线程第"+i+"次");
}
}

}

class ThreJo extends Thread{

ThreJo(String s){
super(s);
}

public void run(){
for(int i =0;i<50;i++){
System.out.println("继承Thread"+i+"次,我是"+getName());
}
}
}

public static void main(String[] args) {
int cnt = 10;
ArrayList workers = new ArrayList();
for(int i = 0; i < cnt; i++) {
Thread worker = new Thread(new MyJob());
worker.start();
workers.add(worker);
}

for(int i = 0; i < cnt; i++) {
worker.join(); // 这里表示等待它完成。
}

// 这里面的代码只会在所有 worker 完成之后才运行。
}

//采用 线程中的jion()方法合并线程 详细案列详见下面的代码

public class MyJionThreadDemo {

public static void main(String[] args) {
JionDemo[] arr=new JionDemo[100];
for(int i=0;i<arr.length;i++){
arr[i]=new JionDemo();
}
for(int i=0;i<arr.length;i++){
try {
arr[i].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
arr[i].start();
}
for(int i=0;i<100;i++){ //主线程最后运行
System.out.println("线程:"+Thread.currentThread().getName()+"正在运行");
}

}

}

class JionDemo extends Thread{
@Override
public void run() {
for(int i=0;i<5;i++){
System.out.println("线程:"+currentThread().getName()+"正在运行");
}
System.out.println("线程:"+currentThread().getName()+"运行结束");
}
}

public class ThreadTest {
    static int i=0;
    public static void main(String[]args){
        //建立3个子线程,以i,i,n,m作为子线程是否结束的判断
        //当所有子线程运行完才开始主线程
        System.out.println("主线程开始");
        Thread t1=new Thread(){
        public void run(){
        System.out.println("子线程1");
        ThreadTest.i+=1;
        }
        };
        //开启线程1
        t1.start();
        Thread t2=new Thread(){
        public void run(){
        try {
        Thread.sleep(1000);
        } catch (InterruptedException e) {
        e.printStackTrace();
        }
        System.out.println("子线程2");
        ThreadTest.i+=1;
        }
        };
        //开启线程2
        t2.start();
        Thread t3=new Thread(){
        public void run(){
        System.out.println("子线程3");
        ThreadTest.i+=1;
        }
        };
        //开启线程3
        t3.start();
        boolean res=true;
        while(res){
        //这里判断子线程是否运行完了
        if(ThreadTest.i==3){
        System.out.println("主线程结束");
        res=false;
        }
        }
    }
}

你是想要这效果么



创建完线程让她们全部进入等待状态,然后当最后一个线程创建完毕集体唤醒

  • 澶氱嚎绋鐨Java
    绛旓細}}涓鑸紦鍔变娇鐢ㄧ浜岀鏂规硶锛屽洜涓Java閲岄潰鍙厑璁稿崟涓缁ф壙锛屼絾鍏佽瀹炵幇澶氫釜鎺ュ彛銆傜浜屼釜鏂规硶鏇村姞鐏垫椿銆侰++ 11ISO C++ 11 鏍囧噯鍦⊿TL涓彁渚涗簡std::thread绫伙紝鍥犳澶氱嚎绋鍙樺緱闈炲父瀹规槗銆 #include<thread>usingnamespacestd;voidthreadFunc(){//杩欓噷鍐欎笂绾跨▼鐨勫唴瀹箎intmain(){threadt(threadFunc);//鍚姩...
  • 鍦Java 涓绾跨▼鐨勫疄鐜版柟娉曟湁鍝簺,濡備綍浣跨敤锝烇綖锝炴
    绛旓細1銆 璁よ瘑Thread鍜孯unnable Java涓瀹炵幇澶氱嚎绋鏈変袱绉嶉斿緞锛氱户鎵縏hread绫绘垨鑰呭疄鐜癛unnable鎺ュ彛銆俁unnable鏄帴鍙o紝寤鸿鐢ㄦ帴鍙g殑鏂瑰紡鐢熸垚绾跨▼锛屽洜涓烘帴鍙e彲浠ュ疄鐜板缁ф壙锛屽喌涓擱unnable鍙湁涓涓猺un鏂规硶锛屽緢閫傚悎缁ф壙銆傚湪浣跨敤Thread鐨勬椂鍊欏彧闇缁ф壙Thread锛屽苟涓攏ew涓涓疄渚嬪嚭鏉ワ紝璋冪敤start()鏂规硶鍗冲彲浠ュ惎鍔ㄤ竴涓嚎绋嬨俆hread ...
  • java 澶氱嚎绋
    绛旓細Java鏀寔澶氱嚎绋嬬紪绋嬶紝鍥犳鐢↗ava缂栧啓鐨勫簲鐢ㄧ▼搴忓彲浠ュ悓鏃舵墽琛澶氫釜浠诲姟銆Java鐨勫绾跨▼鏈哄埗浣跨敤璧锋潵闈炲父鏂逛究锛岀敤鎴峰彧闇鍏虫敞绋嬪簭缁嗚妭鐨勫疄鐜帮紝鑰屼笉鐢ㄦ媴蹇冨悗鍙扮殑澶氫换鍔$郴缁熴侸ava璇█閲锛岀嚎绋嬭〃鐜颁负绾跨▼绫汇俆hread绾跨▼绫诲皝瑁呬簡鎵鏈夐渶瑕佺殑绾跨▼鎿嶄綔鎺у埗銆傚湪璁捐绋嬪簭鏃讹紝蹇呴』寰堟竻鏅板湴鍖哄垎寮绾跨▼瀵硅薄鍜岃繍琛岀嚎绋嬶紝鍙互灏嗙嚎绋...
  • java 绾跨▼
    绛旓細濡傛灉涓嶆槸鐨勮瘽锛屼綘闇瑕佸垎鍒啓娓呮姣忎釜绾跨▼鍦╮un鏂规硶閲搴旇鍋氫粈涔堝伐浣 濡傛灉鏄仛鍚屼竴浠跺伐浣滅殑璇濓細//鍐呴儴绫 Runnable a =new Runnable(){ public void run(){ //浣犳兂鍋氱殑浜嬫儏 } };for(int i = 0;i<10;i++){ new Thread(a).start();} 濡傛灉鏄笉鍚屽伐浣滅殑璇濓紝鏈夊灏戠宸ヤ綔锛屽氨鍒涘缓澶氬皯涓...
  • JAVA澶氱嚎绋闂
    绛旓細main浼鐢熸垚涓涓繘绋.鎵浠ュ氨鏄富绾跨▼.褰撹繖涓繘绋嬫鎺夊悗鎵鏈夌殑绾跨▼閮戒細缁撴潫.鎵浠ユ槸涓昏繘绋.start鏄惎鍔ㄤ竴涓嚎绋.run鏄綘璇寸殑瀵硅薄鏂规硶璋冪敤.鏄鍦ㄤ富绾跨▼閲岄潰鐨.鎵浠ュ氨鏄富绾跨▼浜.寰堢畝鍗曠殑鐞嗚В 灏辨槸main閲岄潰鐨勯兘鏄富鐨.start鍑烘潵鐨勯兘鏄瓙鐨.涓嶇浣犵殑鎵ц鍐呭鏄粈涔 ...
  • Java澶氱嚎绋绋嬪簭璁捐鍒濇鍏ラ棬
    绛旓細鍦Java璇█浜х敓鍓 浼犵粺鐨勭▼搴忚璁¤瑷鐨勭▼搴忓悓涓鏃跺埢鍙兘鍗曚换鍔℃搷浣 鏁堢巼闈炲父浣 渚嬪绋嬪簭寰寰鍦ㄦ帴鏀舵暟鎹緭鍏ユ椂鍙戠敓闃诲 鍙湁绛夊埌绋嬪簭鑾峰緱鏁版嵁鍚庢墠鑳界户缁繍琛 闅忕潃Internet鐨勮繀鐚涘彂灞 杩欑鐘跺喌瓒婃潵瓒婁笉鑳借浜轰滑蹇嶅彈 濡傛灉缃戠粶鎺ユ敹鏁版嵁闃诲 鍚庡彴绋嬪簭灏卞浜庣瓑寰呯姸鎬佽屼笉缁х画浠讳綍鎿嶄綔 鑰岃繖绉嶉樆濉炴槸缁忓父浼氱鍒扮殑 姝ゆ椂CPU璧勬簮琚櫧鐧...
  • 鍦JAVA涓嚎绋鍒板簳璧峰埌浠涔堜綔鐢
    绛旓細鍏舵,鎴戜滑瑕佽В鍐崇殑闂鏄,鎴戜滑搴旇鍦ㄤ唬鐮佹涓婂姞浠涔堟牱鐨勯攣銆傝繖涓棶棰樻槸閲嶇偣涓殑閲嶇偣銆傝繖鏄垜浠挨鍏惰娉ㄦ剰鐨勯棶棰:璁块棶鍚屼竴浠藉叡浜祫婧愮殑涓嶅悓浠g爜娈,搴旇鍔犱笂鍚屼竴涓悓姝ラ攣;濡傛灉鍔犵殑鏄笉鍚岀殑鍚屾閿,閭d箞鏍规湰灏辫捣涓嶅埌鍚屾鐨勪綔鐢,娌℃湁浠讳綍鎰忎箟銆 杩欏氨鏄,鍚屾閿佹湰韬篃涓瀹氭槸澶氫釜绾跨▼涔嬮棿鐨勫叡浜璞°Java璇█鐨...
  • ...璇烽棶涓 java涓湪涓荤嚎绋涓垱寤轰竴涓瓙绾跨▼,閭d箞瀹冧滑鏄厛鎵ц涓荤嚎绋...
    绛旓細涓荤嚎绋灏辨槸main()鏂规硶锛屾槸鏈鍏堟墽琛岀殑锛岀劧鍚庡垱寤轰竴涓瓙绾跨▼锛岃繖涓や釜绾跨▼灏变細鍚屾椂鎵ц锛屼絾浜掍笉褰卞搷锛佹墽琛岃繃绋嬪氨鍍忎綘鍚屾椂鍜屼袱涓汉鑱奞Q锛屼竴浼氬拰浠栬涓ゅ彞锛屼竴浼氬啀鍜屼粬璇翠袱鍙ワ紝浜掍笉鐩稿共锛屼絾鍚屼竴鏃堕棿浣犲彧鍙兘鍜屼竴涓汉鑱婂ぉ锛佹噦涓
  • Java澶氱嚎绋闂鎬荤粨?
    绛旓細Java澶氱嚎绋鍒嗙被涓鍐欎簡21绡囧绾跨▼鐨勬枃绔狅紝21绡囨枃绔犵殑鍐呭寰堝锛屼釜浜鸿涓猴紝瀛︿範锛屽唴瀹硅秺澶氥佽秺鏉傜殑鐭ヨ瘑锛岃秺闇瑕佽繘琛屾繁鍒荤殑鎬荤粨锛岃繖鏍锋墠鑳借蹇嗘繁鍒伙紝灏嗙煡璇嗗彉鎴愯嚜宸辩殑銆java璇剧▼鍩硅鏈烘瀯璁や负杩欑瘒鏂囩珷涓昏鏄澶氱嚎绋嬬殑闂杩涜鎬荤粨鐨勶紝鍥犳缃楀垪浜澶氫釜澶氱嚎绋鐨勯棶棰樸傝繖浜涘绾跨▼鐨勯棶棰橈紝鏈変簺鏉ユ簮浜庡悇澶х綉绔欍佹湁浜...
  • 鍦java閲岄潰浠涔堟槸绾跨▼,浠涔堟槸涓荤嚎绋?涓荤嚎绋嬪拰瀛愮嚎绋嬬殑鍏崇郴
    绛旓細棣栧厛锛java閲鐨绾跨▼娌℃湁涓诲拰瀛愮殑璇存硶锛屽彧鏈夌嚎绋嬩紭鍏堢骇鐨勮娉,涔熻浣犺鐨勬槸杩涚▼鍜岀嚎绋嬪惂锛屼笅闈㈡槸璇︾粏璧勬枡 绾跨▼鏄寚杩涚▼鍐呯殑涓涓墽琛屽崟鍏,涔熸槸杩涚▼鍐呯殑鍙皟搴﹀疄浣.涓庤繘绋嬬殑鍖哄埆:(1)鍦板潃绌洪棿:杩涚▼鍐呯殑涓涓墽琛屽崟鍏;杩涚▼鑷冲皯鏈変竴涓嚎绋;瀹冧滑鍏变韩杩涚▼鐨勫湴鍧绌洪棿;鑰岃繘绋嬫湁鑷繁鐙珛鐨勫湴鍧绌洪棿;(2)璧勬簮鎷ユ湁:...
  • 扩展阅读:java线程池的七个参数 ... java 线程池创建方式 ... java完整项目代码 ... java 新建线程 ... java ... java真实项目开发流程 ... redis ... hashset和hashmap区别 ... java允许多个线程同时执行 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网