我用java调用一个第三方组件中的某个对象的方法,这个方法是多线程的,调用后产生一些线程执行。
我要等这些产生的新线程结束后,调用方(也就是主线程)才继续执行。
我不能修改第三方的代码,请问我该怎么同步?用什么java方法?
 thanks all

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【WhatX】截止到2008-07-10 17:21:32的历史汇总数据(不包括此帖):
    发帖的总数量:111                      发帖的总分数:2616                     每贴平均分数:23                       
    回帖的总数量:380                      得分贴总数量:54                       回帖的得分率:14%                      
    结贴的总数量:109                      结贴的总分数:2536                     
    无满意结贴数:24                       无满意结贴分:570                      
    未结的帖子数:2                        未结的总分数:80                       
    结贴的百分比:98.20 %               结分的百分比:96.94 %                  
    无满意结贴率:22.02 %               无满意结分率:22.48 %                  
    值得尊敬
      

  2.   

    如果不能直接修改代码,那就用AspcetJ修改class。如果这也不能,那除非本身有判断状态的借口,否则的话是没法判断的。可以在被判断的目标线程中插入可以判断执行状态的flag,
    在主线称中,循环判断各个目标线程的执行状态。总之方法很多....
      

  3.   

    可以得到那个线程的引用吗?可以的话用.join()。
    不可以的话可以知道那个线程结束的特征吗?可以的话用
    while(true){
    if(threadEnd()) //判断线程结束
    break;
    }
    如果都不可以,也没办法了。
      

  4.   

    join();方法public class test {
    public final static void main(String[] args) {
    inner in = new inner();
    inner in2 = new inner();
    in.start();
    try {
    in.join();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }

    in2.start();
    }
    static class inner extends Thread {
    public void run() {
    int i = 0;
    while(i++ < 10 ){
    System.out.println(i);
    }
    }
    }
    }public class test {
    public final static void main(String[] args) {
    inner in = new inner();
    inner in2 = new inner(); in.start();

    in2.start();
    }
    static class inner extends Thread {
    public void run() {
    int i = 0;
    while(i++ < 10 ){
    System.out.println(i);
    }
    }
    }
    }
    比较一下2个程序的运行结果
      

  5.   

    不好意思,设10太快了
    你把while(i++ < 100) 这里设成100