`

线程学习【八】 join方法

    博客分类:
  • Java
阅读更多
多线程学习------join方法


package com.zzl.thread;

/**
 * join
 * 当A线程遇到了B线程的.join()方法的时候,A就会等待。等B线程执行完,A线程才会执行。
 * 
 * join可以用来临时加入线程执行
 */
class JoinRunnable implements Runnable{

	@Override
	public void run() {
		for(int i = 0;i < 10;i++){
			System.out.println(Thread.currentThread().getName()+"......."+i);
		}
	}
	
}


public class JoinDemo {
	
	public static void main(String[] args) {
		JoinRunnable r =new JoinRunnable();
		Thread t1 = new Thread(r);
		Thread t2 = new Thread(r);
		t1.start();
		try {
			t1.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		t2.start();
		
	}

}

把 try catch注释掉,运行效果如下(两个线程交替抢占cpu资源):
Thread-0.......0
Thread-0.......1
Thread-1.......0
Thread-1.......1
Thread-1.......2
Thread-0.......2
Thread-1.......3
Thread-0.......3
Thread-0.......4
Thread-0.......5
Thread-0.......6
Thread-0.......7
Thread-0.......8
Thread-0.......9
Thread-1.......4
Thread-1.......5
Thread-1.......6
Thread-1.......7
Thread-1.......8
Thread-1.......9


如果线程 t1 start后调用了 t1.join(),运行效果如下(t1线程先运行完,然后运行t2线程):
Thread-0.......0
Thread-0.......1
Thread-0.......2
Thread-0.......3
Thread-0.......4
Thread-0.......5
Thread-0.......6
Thread-0.......7
Thread-0.......8
Thread-0.......9
Thread-1.......0
Thread-1.......1
Thread-1.......2
Thread-1.......3
Thread-1.......4
Thread-1.......5
Thread-1.......6
Thread-1.......7
Thread-1.......8
Thread-1.......9
分享到:
评论

相关推荐

    关于C# 多线程学习

    关于C#多线程学习,本篇将深入探讨在C#中如何管理和操作线程,包括启动、停止、暂停线程、调整线程优先级等关键知识点。 ### 启动线程 在C#中,启动一个新线程通常通过`Thread`类实现。创建一个新的线程对象时,...

    C++多线程学习

    在"C++多线程学习"这个主题中,我们主要探讨的是如何在C++环境中创建和管理线程,以及解决并发访问时可能出现的问题。 一、C++11及后续版本中的多线程支持 自C++11标准开始,C++提供了内置的多线程库`&lt;thread&gt;`,...

    Java线程 学习

    ### Java线程学习知识点 #### 一、Java线程概览 - **定义与作用**:线程是在程序中独立且并发执行的路径。在Java中,线程被设计为语言的一部分,而不是作为操作系统的底层工具。每个Java程序至少包含一个主线程,在...

    Java线程学习和总结

    Java提供了一些方法来控制线程状态,如`sleep()`使线程暂停执行一段时间,`join()`等待指定线程结束,`yield()`让当前线程暂停,让其他相同优先级的线程有机会执行,`interrupt()`用于中断线程。 同步是Java线程...

    C#多线程学习 Thread类使用 线程等编程方法

    - `Join()`:等待线程完成。 - `Abort()`:强制终止线程(应谨慎使用)。 ### 3. 线程同步 线程同步是确保多个线程安全访问共享资源的过程。C#提供了多种同步机制: - **Mutex**:互斥锁,同一时间只允许一个线程...

    C#多线程学习(二)

    【C#多线程学习(二)】 在C#编程中,多线程是一个重要的概念,它允许程序同时执行多个任务,从而提高了程序的效率和响应性。在本篇文章中,我们将深入探讨如何操纵线程,包括线程的状态以及线程优先级。 首先,...

    JAVA多线程学习内容

    总的来说,Java多线程学习涵盖了线程的创建、同步、通信、调度以及异常处理等多个方面,深入理解和掌握这些知识点对于提升Java程序的性能和复杂性至关重要。通过阅读提供的"Java多线程.pdf"文档,你可以进一步了解和...

    C#多线程学习,学习多线程好资料。

    ### C#多线程学习详解 #### 一、多线程的基本概念 ##### 1. 什么是进程? 进程是程序的一次动态执行过程,它包含了正在运行的程序所需的内存、系统资源以及执行上下文。简单来说,当你启动一个程序时,操作系统会...

    线程学习小Test

    综上所述,这个“线程学习小Test”通过几个具体的Java源代码文件,深入浅出地展示了Java中线程同步的重要方法及其应用。通过学习和实践这些示例,开发者能够更好地理解和掌握多线程环境下的线程同步策略,提升并发...

    多线程学习文档

    ### 多线程学习文档知识点总结 #### 一、线程的基本概念及关系 ##### 进程(Process) - **定义**:进程是Windows系统中的一个基本概念,它包含了运行程序所需的所有资源。 - **特性**: - 相对独立性:一个进程...

    java线程api学习文档

    Java线程API是Java编程语言中的一个重要组成部分,它允许开发者在一个程序中同时执行多个任务,提高了应用程序的效率和响应性。...通过深入阅读"Java线程.pdf"文档,可以进一步学习这些概念的细节和实践应用。

    C#线程参考手册 线程学习

    在C#编程中,线程是并发执行任务的基本单元,理解和掌握线程的使用对于开发高效、响应迅速的多任务应用程序至关重要。本手册将深入探讨C#中的线程概念、创建与...通过不断实践和学习,你将能更好地驾驭C#的线程世界。

    java线程 线程学习资料 java线程教程

    - `join()`方法允许一个线程等待另一个线程执行完毕。 #### 六、线程安全与同步 - **线程安全问题**: - 数据竞争: 多个线程同时修改同一个变量可能导致不一致的结果。 - 死锁: 两个或多个线程因争夺资源而造成...

    C#多线程学习(二)如何操纵一个线程.pdf

    C#多线程学习(二)如何操纵一个线程 在现代软件开发中,多线程编程是一个非常重要的概念,它允许程序同时执行两个或多个部分,以提高应用程序的效率和响应能力。C# 作为一门现代编程语言,提供了强大的多线程支持...

    JAVA线程学习(源代码)

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

    Linux多线程学习

    最后,"Linux多线程学习(五)"可能对这些知识进行了综合应用或者讨论了高级话题,如死锁预防和线程池的实现。 掌握这些多线程编程技术对于开发高效的Linux应用程序至关重要,无论是系统编程、网络服务还是并行计算...

    java线程学习笔记

    Java线程学习笔记涉及了Java多线程编程的多个关键知识点,本篇知识点整理将详细解释每个概念及其在Java中的实现方式。 基本知识部分包含了Java线程编程的基础内容,它们是并发编程的基石。 任务Runnable是一个接口...

    vc++多线程学习实例

    在这个"vc++多线程学习实例"中,我们将探讨如何在VC++环境中实现和管理多线程。 多线程是操作系统中的一个概念,它允许一个程序同时执行多个不同的任务。在单核处理器时代,多线程通过时间片轮转的方式实现了并发...

    【IT十八掌徐培成】Java基础第08天-02.多线程-join-daemon-同步.zip

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发中占据主导地位。多线程是Java中的核心特性,它使得程序能够同时...多线程-join-daemon-同步.avi"的视频教程,你可以深入学习这些概念,并通过实例加深理解。

Global site tag (gtag.js) - Google Analytics