认识Thread.join()

本文详细解析了Java中Thread类的join()方法的作用及使用场景。通过一个具体示例展示了如何利用join()确保子线程完成后再关闭资源,避免因主线程提前结束而导致的数据错误。

今天来总结下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>

### Java程序员招聘职位要求分析 #### 初级Java工程师的核心需求 对于初级Java工程师而言,扎实的基础知识是求职成功的关键。这不仅限于对Java语言本身的熟练掌握,还涉及数据库技术和计算机原理的理解。例如,候选人应深入理解基本数据类型、标识符和关键字、运算符和表达式等内容[^3]。此外,对象和类的概念以及常用类(如`String`, `Date`, `Stream`, `Number`, `Math`, `StringBuffer`, 和 `Scanner`)的应用也至关重要。 除了上述基础知识外,初级开发者还需具备一定的实际操作能力,能够解决具体问题并完成工作任务。这种实践技能通常体现在对异常处理机制、正则表达式的理解和运用上。同时,企业期望应聘者拥有清晰的思维逻辑,以便快速适应团队协作环境并贡献价值[^1]。 #### 行业趋势与市场需求变化 尽管整体经济增速有所减缓,但企业在关键技术岗位上的投入并未减少,尤其是针对Java开发工程师这一角色。随着各行业的数字化转型加速,越来越多的传统领域开始依赖高效的软件解决方案来提升运营效率。因此,即便是在较为保守的市场环境下,Java开发人员依然保持较高的需求量[^2]。 值得注意的是,由于Java广泛应用于金融、电子商务、物流管理及医疗服务等行业,其职业发展前景广阔。不同领域的项目特性决定了对应聘者的特定技术偏好有所不同;然而,无论在哪一方向发展,精通核心概念始终是最为基础的前提条件之一。 #### 高阶技能的重要性 当目标锁定大型互联网公司或追求更高级别的职位时,则需进一步扩展个人技术栈范围。以BAT为代表的顶级科技巨头往往倾向于招募那些除常规编码技巧之外还能展示额外专长的人才。比如,在网络通信方面熟悉RESTful API设计原则及其背后的HTTP协议细节就显得尤为重要[^4]。另外,关于并发控制理论的实际应用经验和多线程编程的能力也被视为衡量资深程度的重要指标之一[^5]。 以下是实现高阶功能的一个简单示例——创建一个多线程程序: ```java public class MultiThreadExample { public static void main(String[] args) throws InterruptedException { Thread threadA = new Thread(() -> System.out.println("Thread A is running")); Thread threadB = new Thread(() -> System.out.println("Thread B is running")); threadA.start(); threadB.start(); // Wait for both threads to finish execution. threadA.join(); threadB.join(); System.out.println("Both Threads have finished."); } } ``` 此代码片段展示了如何启动两个独立运行的任务,并等待它们全部完成后继续执行主线程中的剩余部分。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值