理解高并发(11).线程通信之_join使用及原理
2017-08-07 12:55
696 查看
概述
根据jdk官方API的定义:
Thread.join方法是阻塞调用线程(也称阻塞主线程),待被调用线程(子线程)运行结束后主线程才会被唤醒。 通常用在main方法中。
替代方案
jdk1.7 CountDownLatch
join底层实现原理
wait、notify机制,可以深入的查看底层实现源码:
/**
2 * Waits at most <code>millis</code> milliseconds for this thread to
3
* die. A timeout of <code>0</code> means to wait forever.
4
*/ 5
//此处A timeout of 0 means to wait forever 字面意思是永远等待,其实是等到t结束后。
6 public
final
synchronized
void join(long
millis) throws InterruptedException {
7 long base = System.currentTimeMillis();
8 long now = 0;
9 10
if (millis < 0) {11
throw
new IllegalArgumentException("timeout value is negative");12
}13
14
if (millis == 0) {15
while (isAlive()) {16
wait(0);17 }18
} else {19
while (isAlive()) {20
long delay = millis - now;21
if (delay <= 0) {22
break;23
}24 wait(delay);25
now = System.currentTimeMillis() - base;26 }27
}28 }
根据jdk官方API的定义:
Thread.join方法是阻塞调用线程(也称阻塞主线程),待被调用线程(子线程)运行结束后主线程才会被唤醒。 通常用在main方法中。
替代方案
jdk1.7 CountDownLatch
join底层实现原理
wait、notify机制,可以深入的查看底层实现源码:
/**
2 * Waits at most <code>millis</code> milliseconds for this thread to
3
* die. A timeout of <code>0</code> means to wait forever.
4
*/ 5
//此处A timeout of 0 means to wait forever 字面意思是永远等待,其实是等到t结束后。
6 public
final
synchronized
void join(long
millis) throws InterruptedException {
7 long base = System.currentTimeMillis();
8 long now = 0;
9 10
if (millis < 0) {11
throw
new IllegalArgumentException("timeout value is negative");12
}13
14
if (millis == 0) {15
while (isAlive()) {16
wait(0);17 }18
} else {19
while (isAlive()) {20
long delay = millis - now;21
if (delay <= 0) {22
break;23
}24 wait(delay);25
now = System.currentTimeMillis() - base;26 }27
}28 }
相关文章推荐
- 【Java并发编程】之十:使用wait/notify/notifyAll实现线程间通信的几点重要说明
- 理解Java与Android中线程与线程池的原理和使用
- 【Java并发编程】之十:使用wait/notify/notifyAll实现线程间通信的几点重要说明
- 深入理解Java并发2——Java线程实现原理
- 【Java并发编程】之十:使用wait/notify/notifyAll实现线程间通信的几点重要说明
- 理解高并发(9).线程通信之_wait、notify
- java挑战高并发 之(10):使用wait/notify/notifyAll实现线程间通信的几点重要说明
- java线程中join方法原理,以及守护线程的使用
- 转:【Java并发编程】之十:使用wait/notify/notifyAll实现线程间通信的几点重要说明
- Java并发——使用Condition线程间通信
- 理解高并发(10).线程通信之_线程中断技术
- 【Java并发编程】:使用wait/notify/notifyAll实现线程间通信
- 【Java并发编程】11、volatile的使用及其原理
- 【Java并发编程】之十:使用wait/notify/notifyAll实现线程间通信的几点重要说明
- 多线程编程-线程间通信-join方法的使用(六)
- 简单的,使用套接字实现TCP通信(用线程实现并发)
- 线程之间通信之join应用与实现原理剖析
- 【Java并发编程】:使用wait/notify/notifyAll实现线程间通信的几点重要说明
- 【Java并发编程】之十:使用wait/notify/notifyAll实现线程间通信的几点重要说明(r)
- Java 线程与并发研究系列三(join()方法使用)