MultiThreading join(Long millis)操作

时间:2015-03-31 15:31:14

标签: java multithreading concurrency

直接提问。 Thread.join(x)从调用start()方法的那一刻开始计算,或者从调用join(x)方法的那一刻开始计算?

要证明:以下哪种解决方案是正确的做法?

        Set<Thread> myThreads=new HashSet<Thread>();
        for(Task t : tasks){
            try{
                Thread thread=new ConcurrentTask(t);
                thread.start();
                myThreads.add(thread);
                Thread.sleep(1000);
            }catch(Exception e){

            }
        }
 //solution 1:
        for(Thread t: myThreads){
           try{
              t.join(10000) //wait for at most 10 seconds
           }catch(Exception e){}
        }
 //solution 2:
        long maxWaitTime=System.currentTimeMillis()+ (10*1000);//max wait is 10 seconds;
        for(Thread t: myThreads){
            long threadWait=maxWaitTime - System.currentTimeMillis();
            if(threadWait<100){
                threadWait=100;
            }
           try{
              t.join(threadWait) //wait for at most 10 seconds
           }catch(Exception e){}

        }

1 个答案:

答案 0 :(得分:1)

由于您正在执行多个线程,并且看起来所有线程的最长等待时间应该是10秒,因此选项2是正确的。等待时间来自等待执行,它不检查总线程执行时间。