`
rokuan
  • 浏览: 20402 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

对java线程join方法的理解

    博客分类:
  • Java
阅读更多
先上代码:
public class ThreadA extends Thread {

	@Override
	public void run() {
		System.out.println("A start...");
		for (int i = 0; i < 10; i++) {
			try {
				Thread.sleep(1000);
				System.out.println("ta:"+i);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		System.out.println("A end...");
	}

}

public class ThreadB extends Thread {
	@Override
	public void run() {
		System.out.println("B start...");
		ThreadA t = new ThreadA();
		try {
			t.start();  //1
			t.join();
			for (int i = 0; i < 3; i++) {
				System.out.println(i);
			}
			System.out.println("B end...");
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

public class Tst {
	public static void main(String[] args) {
		System.out.println("main start...");
		ThreadB b = new ThreadB();
		b.start();
		try {
			b.join();  //2
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("main end...");
	}
}


运行结果如下:
引用

main start...
B start...
A start...
ta:0
ta:1
ta:2
ta:3
ta:4
ta:5
ta:6
ta:7
ta:8
ta:9
A end...
0
1
2
B end...
main end...

如果将注释标记1处的那行注释掉,则threadA不会启动,即join方法会检查线程是否启动,若未启动,则什么都不做。
若启动,则调用join的这个线程获得控制权,必须等这个线程结束后,才能继续当前线程的执行。
所以若将注释标记2处的那行注释掉,main线程将提早结束,不会等到threadB结束后再结束。而threadB并不会受main线程影响。
0
2
分享到:
评论

相关推荐

    Java线程中wait,await,sleep,yield,join用法总结.pdf

    以上就是对Java线程中wait、await、sleep、yield、join用法的总结。这些方法在实际开发中,对于控制多线程运行的时序和协调非常关键。理解这些方法的正确使用方式是掌握Java并发编程的基础。同时,使用时需特别注意...

    Java线程状态流转图

    Java线程状态流转图知识点总结 Java线程状态流转图是一种用于描述Java线程生命周期中不同的状态和状态...通过了解Java线程状态流转图,我们可以更好地理解Java线程的生命周期,并提高Java多线程编程的效率和可靠性。

    Java线程.ppt

    学习Java线程,理解其创建、状态转换、调度和控制,以及如何处理线程间的互斥和同步,对于开发高效、稳定的并发程序至关重要。通过深入研究这些概念,开发者能够编写出更符合现代计算需求的高质量软件。

    Java线程中yield与join方法的区别Java开发J

    在Java多线程编程中,理解并正确使用`yield`和`join`方法是至关重要的。这两个方法都属于线程控制策略的一部分,但它们的作用和使用场景有所不同。 首先,我们来详细探讨`Thread.yield()`方法。这个方法的目的是让...

    java多线程Demo

    Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY),默认优先级是NORM_PRIORITY。但是,线程优先级并不保证绝对的执行顺序,操作系统调度策略可能影响实际执行顺序。 7. join()方法: 一个线程...

    Java线程(第三版)

    《Java线程(第三版)》是一本深入探讨Java线程技术的专业书籍,旨在帮助开发者理解和掌握Java平台上的多线程编程。Java线程是并发编程的重要组成部分,它允许程序同时执行多个任务,从而充分利用系统资源,提高程序的...

    java线程实例 各种小Demo

    Java线程是多任务编程的重要概念,它允许程序同时执行多个独立的任务,从而...在"线程池.rar"和"线程实例"这两个文件中,你可以找到关于这些概念的具体示例代码,通过学习和实践,可以深入理解Java线程的运用和管理。

    JAVA线程学习(源代码)

    本资源"JAVA线程学习(源代码)"提供了关于Java线程的源代码示例,帮助我们深入理解和实践线程的使用。 首先,我们要理解Java中的线程模型。Java线程由`java.lang.Thread`类或`java.util.concurrent.Executor`框架来...

    Java线程学习和总结

    本文档("Java线程学习和总结.htm")可能包含了更多关于线程的实例、源码分析和常见问题解决方案,你可以通过阅读来进一步加深对Java线程的理解。同时,"Java线程学习和总结.files"目录下的文件可能是与文章相关的...

    java线程状态转换图

    了解线程状态转换图对 Java 编程的理解和应用非常重要。本文将详细介绍 Java 线程状态转换图,包括初始状态、可运行状态、运行状态、阻塞状态、锁池状态、等待队列状态和终止状态七种状态的定义、特点和转换关系。 ...

    java线程文档大全

    这些知识点覆盖了Java线程编程的基础到高级应用,对于Java开发者来说,理解和掌握这些内容对于编写高效、安全的并发程序至关重要。通过深入学习和实践,开发者能够更好地应对多线程环境下的挑战。

    java线程.rar

    Java线程是Java编程语言中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,线程是通过类`Thread`或实现`Runnable`接口来创建和管理的。Java线程模型是基于操作系统的原生...

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要...通过对这些知识点的学习和实践,读者可以深入理解Java多线程的运用,提升编程技能。

    简单的java线程demo

    本示例"简单的Java线程demo"旨在帮助初学者理解如何在Java中创建和管理线程。 在Java中,有两种主要的方式来创建线程:继承Thread类和实现Runnable接口。下面我们将详细讨论这两个方法。 1. 继承Thread类: 当一个...

    Java多线程知识点总结

    此外,sleep方法可以使线程进入阻塞状态一段时间,而join方法则允许一个线程等待另一个线程完成其任务。 了解线程池的概念也是Java多线程编程中的一个重要知识点。线程池是一种多线程处理形式,它将线程和任务的...

    java线程与并发编程实践

    本书《java线程与并发实践编程》由Jeff Friesen撰写,2017年2月出版,提供了关于Java线程API和并发工具的详细指南,帮助开发者深入理解和应用这些关键概念。 首先,Java线程是程序执行的独立路径,每个线程都有自己...

    关于线程(java)两天的课件

    Java线程有五种基本状态:新建(New)、可运行(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Terminated)。这些状态之间的转换是通过调用特定的方法,如start()、sleep()、join()、wait()、notify()等...

    Java多线程机制(讲述java里面与多线程有关的函数)

    线程联合(Join)是让一个线程等待另一个线程完成后再继续执行,通过调用`join()`方法实现。 9.11 守护线程: 守护线程(Daemon)是一种不阻止程序退出的线程,如垃圾收集器就是守护线程。当所有非守护线程结束时,...

    java线程使用教程

    ### Java线程使用教程知识点详解 #### 一、线程基础概述 - **定义与特点**:线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中...希望本教程能帮助读者更好地理解和掌握Java线程的使用方法。

    java多线程经典案例

    阻塞状态通常发生在线程等待I/O操作完成、调用sleep()方法、等待锁释放或者调用join()方法等待其他线程结束时。 在`threadTest`这个案例中,我们可能会看到如何使用这些概念来创建实际的应用场景。例如,一个典型的...

Global site tag (gtag.js) - Google Analytics