`

线程join方法的理解

阅读更多

一个偶然机会,又接触到线程的join方法了。它的确切含义是什么呢?总感觉对它的理解还不是很顺,疙疙瘩瘩的。

 

网上搜搜看?

 

沙里淘金地找到了这个简明扼要的解释。原文(http://blog.csdn.net/wistronits/archive/2005/12/19/556035.aspx),转载(http://hi.baidu.com/magiccode/blog/item/09deb60f0eaea9edab6457a2.html/cmtid/b8b5a545479d1d2ecffca3ca)。 

 

 

试了给出的例子后,join方法的含义明白了。可从英语角度来看,这跟方法名“join”的含义有什么联系呢?

 

 

于是,又回读的Java的经典教材《Thinking In Java》。 看到了这么句话:

 

If a thread calls t.join( ) on another thread t, then the calling thread is suspended until the target thread t finishes (when t.isAlive( ) is false). 。 

 

这样,“join”英文义也就联系起来了。 

 

再往下想,是什么原因造成了对join方法理解的不顺呢?  是“t.join”这样主谓结构。

一般来说,一个对象调用其方法时,是有主谓关系的, 如aThread.wait()方法调用后,线程athread就wait了。 按这个主谓关系来理解aThread.join()会是什么意思呢?

aThread去join谁?当前线程?好像是aThread停下来而等当前线程完成后,再“手拉手地往下走”。 联系上面博客中的例子和ThinkingInJava中的描述,我们知道,是当前线程停下来等aThread完事后,当前线程执行下面的statement.

 

这样一翻思考后,有了想给join改名的想法:能否把“join”改为“joinedBy”,这样词不达意的问题就圆过去了。 如果非要加个参数来表示join动作发起的主语的话那就这样:aThread.joinedBy(anotherThread). 当然这个anotherThread可以省略而由JVM来自动加上。 

 

这样理解起来顺畅多了。 

 

“风吹着杨柳,唰啦啦啦啦啦, 小河里水流, 哗啦啦啦啦啦.....”

1
0
分享到:
评论

相关推荐

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

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

    NET多线程同步方法详解

    最后,Thread.Join方法是另一种简单的同步手段,它使得一个线程等待另一个线程完成后再继续执行。这在需要按特定顺序执行线程或者依赖其他线程的结果时非常有用。 综上所述,.NET框架提供了丰富的多线程同步机制,...

    浅谈java多线程 join方法以及优先级方法

    `join()`方法用于线程同步,当一个线程(例如线程A)调用另一个线程(例如线程B)的`join()`方法时,线程A会暂停执行,直到线程B完成其所有工作。这样可以确保线程A在继续执行之前等待线程B的完成,避免数据不一致或...

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

    本文将总结五个关键的线程控制方法:wait()、await()、sleep()、yield()和join()。这些方法各自有独特的用途和不同的工作机制。 一、wait()、notify()、notifyAll()用法 wait()、notify()和notifyAll()是Object类...

    C#语言多线程初步理解

    此外,`Thread.Join`方法用于等待特定线程完成,而`Thread.Abort`可以强制终止线程,但这通常是不推荐的,因为它可能导致未捕获的异常和资源泄漏。更安全的方法是设置一个取消标志,让线程在检查到这个标志后自行...

    python线程join方法原理解析

    本文将深入解析`join()`方法,它是控制线程执行顺序和同步的重要手段。 1. **默认线程行为** Python默认情况下,创建的线程会与主线程同步执行。这意味着,无论主线程是否执行完毕,它都会等待所有子线程执行完毕...

    python 多线程中join()的作用

    温习python 多进程语法的时候,对 join的理解不是很透彻,本文通过代码实践来加深对 join()的认识。 multiprocessing 是python提供的跨平台版本的多进程模块。multiprocessing可以充分利用多核,提升程序运行效率。...

    Linux下的多线程编程方法研究.pdf

    【Linux下的多线程编程方法】 在Linux操作系统中,多线程编程是实现高效并发执行的关键技术。自20世纪80年代中期以来,由于其节省资源和便捷的通信机制,多线程已被广泛应用于操作系统中。相较于进程,线程的创建和...

    理解多线程,写一个多线程应用程序,要求能在用户级实现线程的调度,如启动、挂起、恢复、停止,的C thread、java thread实现。

    Java中,`join`方法有类似功能,而`interrupt`方法可以用来中断线程,通常配合`isInterrupted`或`interrupted`检查中断状态。 在实际应用中,线程调度还需要考虑线程同步和互斥问题,以防止数据竞争和死锁。C语言中...

    多线程控制方法

    在Java编程中,多线程控制是实现并发执行任务的关键技术。...理解并熟练掌握这些方法,对于编写高效、稳定的多线程程序至关重要。在实际项目中,合理运用这些方法可以避免死锁、饥饿等问题,提高程序的并发性能。

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

    当我们调用一个线程的`join()`方法时,当前线程会被阻塞,直到被`join()`的线程运行完毕。这在需要按顺序执行线程或者依赖其他线程完成特定任务时非常有用。例如,在处理数据的线程A完成后,我们可能希望清理资源的...

    设计滚动字演示线程状态及改变方法

    - **join()**:使当前线程等待特定线程完成执行。 - **interrupt()**:中断线程,标记线程的中断状态。 - **isInterrupted()和interrupted()**:检查线程是否被中断,前者是非静态方法,后者是静态方法。 4. **...

    VC多线程编程的常用三种方法

    本篇文章将详细阐述VC++中实现多线程的三种常见方法:使用`CreateThread`函数、`_beginthread`/`_beginthreadex`函数以及基于`std::thread`的C++11标准库方法。 1. **使用CreateThread函数** Windows API提供的`...

    线程常用方法示例

    理解并熟练掌握这些方法,对于编写高效、可靠的多线程代码至关重要。 通过`ThreadDemo`这个示例项目,你可以看到如何在实践中运用这些方法,以及它们如何影响线程的行为和程序的执行流程。通过分析和调试代码,你将...

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

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

    对python 多线程中的守护线程与join的用法详解

    本篇文章将详细讲解Python多线程中的两个关键概念:守护线程(Daemon Thread)和join()方法。 1. **守护线程(Daemon Thread)**: 守护线程是一种特殊的线程,它的生命周期与主线程密切相关。默认情况下,当主线...

    线程理解,线程 c++

    本文将深入探讨线程的理解,并以C++为例,阐述其在实际编程中的应用。 线程可以被视为程序的执行流,每个线程都有自己的程序计数器、栈和局部变量,但共享同一块内存空间,包括全局变量和静态变量。这意味着不同...

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

    虽然我个人认为我们当中很少有人能真正获得机会开发复杂的多线程应用(在过去的七年中,我得到了一个机会),但是理解多线程对增加你的信心很有用。之前,我讨论了一个wait()和sleep()方法区别的问题,这一次,我将会...

    线程的几种控制方式以及线程间的几种通信方式

    7. **线程join()**:在Java中,`thread.join()`方法使得当前线程等待指定线程结束再继续执行,Python中没有直接对应的方法,但可以通过`Event`或`Condition`对象实现类似功能。 8. **守护线程(Daemon)**:Java中...

Global site tag (gtag.js) - Google Analytics