直接提问。 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){}
}
答案 0 :(得分:1)
由于您正在执行多个线程,并且看起来所有线程的最长等待时间应该是10秒,因此选项2是正确的。等待时间来自等待执行,它不检查总线程执行时间。