`

线程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
分享到:
评论

相关推荐

    python 多线程中join()的作用

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

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

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

    Java线程之join_动力节点Java学院整理

    join() 定义在Thread.java中。 join() 的作用:让“主线程”等待“子线程”结束之后才能继续运行。这句话可能有点晦涩,我们还是通过例子去理解

    关于C#中Thread.Join()的一点理解

    是第一次在C#中接触Thread,自己研究了一下其中Thread.Join()这个方法,下面谈谈自己的理解。  Thread.Join()在MSDN中的解释很模糊:Blocks the calling thread until a thread terminates  有两个主要问题: ...

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

    Java线程中wait、await、sleep、yield、join用法汇总,文章里面总结了这些关键字的用法,并且里面带有源码帮助分析用法,此一文就可以理解这些关键字用法,推荐拥有

    Python THREADING模块中的JOIN()方法深入理解

    其中对join()方法不理解,看python官网文档的介绍: join([timeout]):等待直到进程结束。这将阻塞正在调用的线程,直到被调用join()方法的线程结束。(好难翻译,应该是这个意思) 哈哈,这个易懂。 join方法,如果...

    Linux系统编程之线程同步

    pthread_join(tid, NULL); return 0; } 【mutex.c】 【练习】:修改该程序,使用mutex互斥锁进行同步。 1. 定义全局互斥量,初始化init(&m, NULL)互斥量,添加对应的destry 2. 两个...

    linux系统编程之线程.zip

    thread线程以不同的方法终止,通过pthread_join得到的终止状态是不同的,总结如下: 1. 如果thread线程通过return返回,retval所指向的单元里存放的是thread线程函数的返回值。 2. 如果thread线程被别的线程调用...

    Java线程

    线程常用方法 inturrupt打断线程 join()线程并行执行变为串行 理解线程的概念 一个程序至少有一个进程,一个进程至少有一个线程; 线程是进程的一个实体,是CPU调度和分派的基本单位; 一个线程可以创建和撤销另...

    Java高级程序设计-多线程(二).pptx

    本章内容 掌握同步代码块的使用 掌握同步方法的使用 理解线程死锁 掌握 ThreadLocal 类的使用 使用多线程模拟猴子采花 使用同步方法模拟购票 使用多线程模拟购物订单生成 使用 ThreadLocal 类模拟银行取款 Java高级...

    JAVA高质量并发详解,多线程并发深入讲解

    本书全面解析了Java并发编程的核心概念、原理和实践,帮助读者深入理解多线程并发编程的精髓,提升编程能力和系统性能。 书中首先介绍了并发编程的基础知识,包括线程的基本概念、线程的生命周期、线程安全等问题。...

    BAT面试官有点懵系列,Java多线程你真的理解透彻了吗?带你玩转一次多线程!Let’s go!别再out了!

    文章目录神标题引入线程和进程多线程的优势线程创建方式继承Thread类来创建和启动实现Runnable接口重写run方法创建线程类使用 Callable 和 Future 创建线程三种创建线程方式做出对比线程生命周期线程控制join线程...

    python使用Thread的setDaemon启动后台线程教程

    通过前台线程\后台线程, 可以有效理解线程运行顺序.(复杂的多线程程序可以通过设置线程优先级实现) 后台线程与前台线程的直接区别是, 1)setDaemon(True): 当主线程退出时,后台线程随机退出; 2)setDaemon(False)...

    Linux 进程控制与进程互斥(附源代码)(附实验报告)

    3、利用最常用的三个函数pthread_create,pthread_join和pthread_exit编写了一个最简单的多线程程序。理解多线程的运行和输出情况; 4、利用信号量机制控制多线程的运行顺序,并实现多线程中数据的共享; 5、分析...

    forkjoin.zip

    14、深入理解井发可见性、有序性、原子性与JMM内存模型 (1).pdf 15、CPU缓存架构详解&高性能内存队列Disruptor 实战 (1).pdf 16、常用并发设计模式精讲 (1).pdf designpattern.zip disruptor.zip forkjoin.zip jmm(1...

    深入理解Android卷1全

    6.2.5 秋风扫落叶-StartThread Pool和join Thread Pool分析 / 149 6.2.6 你彻底明白了吗 / 152 6.3 服务总管ServiceManager / 152 6.3.1 ServiceManager的原理 / 152 6.3.2 服务的注册 / 155 6.3.3 ServiceManager...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段04讲、线程生命周期以及start方法源码剖析.mp4 │ 高并发编程第一阶段05讲、采用多线程方式模拟银行排队叫号.mp4 │ 高并发编程第一阶段06讲、用Runnable接口将线程的逻辑执行单元从控制中...

    Java并发编程原理与实战

    线程之间通信之join应用与实现原理剖析.mp4 ThreadLocal 使用及实现原理.mp4 并发工具类CountDownLatch详解.mp4 并发工具类CyclicBarrier 详解.mp4 并发工具类Semaphore详解.mp4 并发工具类Exchanger详解.mp4 ...

    《深入理解Android》卷Ⅰ

    6.2.5 秋风扫落叶-StartThread Pool和join Thread Pool分析 6.2.6 你彻底明白了吗 6.3 服务总管ServiceManager 6.3.1 ServiceManager的原理 6.3.2 服务的注册 6.3.3 ServiceManager存在的意义 6.4 ...

    C#全能速查宝典

    《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与...,共包含562个C#编程中常用的属性、方法、类和各种技术...

Global site tag (gtag.js) - Google Analytics