Thread.join()详解
http://www.open-open.com/lib/view/open1371741636171.html
线程A的第N行中调用线程B的join(),可以理解为将线程B的代码插入到线程A的代码中了,产生的结果就是线程A需要等到线程B执行完毕了,才能继续执行线程A的第N+1行。
Thread.sleep常见隐患
/**常见的写法*/
public void run() {
try{
Thread.sleep(1000);
} catch (InterruptedException ie){
ie.printStackTrace();
}
}
/**常见的写法存在的隐患:
如果这个线程在执行sleep之前就被interrupt了,上述代码就会抛出异常。
比如ThreadPoolExecutor框架就是通过对所有的Thread进行interrupt来取消所有线程,这时候我们上述代码就会抛出异常。
*/
/**完善后的代码*/
public void run() {
while (!Thread.currentThread().isInterrupted()) {
try{
Thread.sleep(1000);
} catch (InterruptedException ie){
ie.printStackTrace();
}
}
}