今天来总结下join();
/**
* 测试Thread的join()方法,主线程main线程,和子线程ts,在main中调用了ts的join()方法,那么意思就是
* 之后的操作要等待ts线程执行完run()方法之后才能执行
* ts.join();注释掉之后,主线程会不等待ts执行完就往下执行,造成文件写入错误,因为主线程吧fos给关闭了;
* 所以需要加上ts.join();这一句
*
* @author JIE
*
*/
public class ThreadState extends Thread {
private static FileOutputStream fos;
static File output = new File("G:\\output.log");
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
if(!output.exists()){
output.createNewFile();
}
fos = new FileOutputStream(output,false);
final ThreadState ts = new ThreadState();
ts.start();
System.out.println("1:"+System.currentTimeMillis());
ts.join();
System.out.println("3:"+System.currentTimeMillis());
fos.close();
}
@Override
public void run() {
doIO();
}
private void doIO(){
File file = new File("F:\\BaiduYun");
try {
System.out.println("2:"+System.currentTimeMillis());
displayFile(file);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void displayFile(File f) throws Exception{
if(f.isDirectory()){
File[] inFiles = f.listFiles();
for(int i=0;i<inFiles.length;i++){
displayFile(inFiles[i]);
}
}else{
fos.write(f.getAbsolutePath().getBytes());
fos.write("\n".getBytes());
fos.flush();
}
}
}
<a href="http://gjsq.me/16623328"><img style="border: 0px" src="http://203.158.22.211/aff/banners/01.gif"></img></a>