欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java中的Thread类的join

程序员文章站 2022-07-12 18:33:54
...
join是Thread的实例方法,官方解释为:等待该线程终止。
其作用就是将调用join的线程优先执行,当前正在执行的线程阻塞,直到调用join方法的线程执行完毕或者被打断,主要用于线程之间的交互。
还有两个重载的方法:
1、join(long millis),等待该线程终止的时间最长为 millis 毫秒。为 0 意味着要一直等下去。
2、join(long millis, int nanos),等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。
下面以几个例子说明:
例1:
System.out.println("主线程开始.");
TaskD taskD = new TaskD();
taskD.start();
try {
	hread.sleep(2000);
	System.out.println("taskD join,主线程等待.");
	/*
	* 此处如果taskD没有join,那么主线程会优先执行完毕,taskD在未执行完毕时中断。
	* join之后,主线程等待线程taskD执行完毕再执行
	*/
	taskD.join();
} catch (InterruptedException e) {
	e.printStackTrace();
}
System.out.println("主线程结束.");
 
java中的Thread类的join
            
    
    博客分类: java多线程 javaThread多线程join 
 
例2:
System.out.println("主线程开始.");
TaskD taskD = new TaskD();
TaskE taskE = new TaskE(taskD);
try {
	taskD.start();
	Thread.sleep(2000);
	taskE.start();
	/*
	* 此处taskE join,主线程等待,
	 * 在taskE执行时,taskD join,所以 最有的执行优先级时taskD,taskE,主线程
	*/
	taskE.join();
} catch (InterruptedException e) {
	e.printStackTrace();
}
System.out.println("主线程结束.");
例3:
System.out.println("主线程开始.");
		TaskD taskD = new TaskD();
		TaskE taskE = new TaskE(taskD);
		try {
			taskD.start();
			Thread.sleep(2000);
			taskE.start();
			/*
			 * 此处taskE不进行 join,主线程不等待,
			 * 在taskE执行时,taskD join, taskE等待taskD执行完毕再执行
			 * 但由于主线程没有阻塞,优先taskD和taskE执行完毕,所以taskD和taskE被中断。
			 */
			//System.out.println("taskE join,主线程等待.");
			//taskE.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("主线程结束.");
 
java中的Thread类的join
            
    
    博客分类: java多线程 javaThread多线程join 
  • java中的Thread类的join
            
    
    博客分类: java多线程 javaThread多线程join 
  • 大小: 4.6 KB
  • java中的Thread类的join
            
    
    博客分类: java多线程 javaThread多线程join 
  • 大小: 6.2 KB
  • java中的Thread类的join
            
    
    博客分类: java多线程 javaThread多线程join 
  • 大小: 4 KB