认识Thread.join()

来源:互联网 发布:梦幻西游伤害换算法伤 编辑:程序博客网 时间:2024/06/06 14:59

今天来总结下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();}@Overridepublic 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>

0 0