多线程的join()方法
来源:互联网 发布:广州网络危机公关公司 编辑:程序博客网 时间:2024/06/04 19:50
线程的合并指的是:将指定的线程加入到当前的线程之中,可以将两个交替执行的线程合并为顺序执行的线程,如果在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。
public class JoinThread {public static void main(String[] args) {//线程的合并/* * 把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。 * 比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。 * 比如在下面的例子中在20之前两个线程交替执行,但是当join()后一直在执行加入的线程, * 直到加入的线程完毕再继续执行其他的线程 */Join j = new Join();j.setName("分线程");j.start();for (int i = 0; i < 50; i++) {if(i == 20){try {j.join();//当主线程执行到20时,强行将Join线程合并,等Join线程执行完毕,再执行剩下的数字} catch (InterruptedException e) {e.printStackTrace();}}System.out.println(Thread.currentThread().getName() + ":" + i);}}}class Join extends Thread{@Overridepublic void run() {for (int i = 0; i < 50; i++) {System.out.println(Thread.currentThread().getName() + ":" + i);}}}
输出的结果:
分线程:0分线程:1分线程:2分线程:3分线程:4分线程:5分线程:6分线程:7分线程:8分线程:9分线程:10分线程:11分线程:12分线程:13分线程:14分线程:15分线程:16main:0分线程:17分线程:18分线程:19分线程:20分线程:21分线程:22分线程:23分线程:24分线程:25分线程:26分线程:27分线程:28分线程:29分线程:30分线程:31分线程:32分线程:33分线程:34分线程:35分线程:36分线程:37分线程:38分线程:39分线程:40分线程:41分线程:42分线程:43分线程:44分线程:45分线程:46分线程:47分线程:48分线程:49main:1main:2main:3main:4main:5main:6main:7main:8main:9main:10main:11main:12main:13main:14main:15main:16main:17main:18main:19main:20main:21main:22main:23main:24main:25main:26main:27main:28main:29main:30main:31main:32main:33main:34main:35main:36main:37main:38main:39main:40main:41main:42main:43main:44main:45main:46main:47main:48main:49源码中的解释:
<span style="font-size:14px;"> /** * </span><span style="color:#ff0000;"><strong>Waits at most {@code millis} milliseconds for this thread to * die. A timeout of {@code 0} means to wait forever.注意看这句话,它说的意思就是加入的线程死亡后才继续执行否则,永远等待</strong></span><span style="font-size:14px;"> * * <p> This implementation uses a loop of {@code this.wait} calls * conditioned on {@code this.isAlive}. As a thread terminates the * {@code this.notifyAll} method is invoked. It is recommended that * applications not use {@code wait}, {@code notify}, or * {@code notifyAll} on {@code Thread} instances. * * @param millis * the time to wait in milliseconds * * @throws IllegalArgumentException * if the value of {@code millis} is negative * * @throws InterruptedException * if any thread has interrupted the current thread. The * <i>interrupted status</i> of the current thread is * cleared when this exception is thrown. */ public final synchronized void join(long millis) throws InterruptedException { long base = System.currentTimeMillis(); long now = 0; if (millis < 0) { throw new IllegalArgumentException("timeout value is negative"); } if (millis == 0) { while (isAlive()) { wait(0); } } else { while (isAlive()) { long delay = millis - now; if (delay <= 0) { break; } wait(delay); now = System.currentTimeMillis() - base; } } }</span>
0 0
- 多线程的join()方法
- 多线程的join方法
- Java多线程的join方法
- 多线程:Thread类的Join()方法
- 初学Java多线程:join方法的使用
- 初学Java多线程:join方法的使用
- Java多线程中join方法的理解
- 初学Java多线程:join方法的使用
- Java多线程中join方法的测试
- 多线程:Thread类的Join()方法
- Java多线程中join方法的理解
- Java多线程中join方法的理解
- Java多线程中join方法的理解
- java多线程中join方法的理解
- Java多线程中join方法的理解
- Java多线程中join方法的理解
- Java多线程中join方法的作用
- Java多线程中join方法的理解
- 通信传播的各种效应
- OpenCv中IplImage图像格式与BYTE图像数据的转换
- 一个简单的Android 动态Fragment实例
- 关于Qt中的tr()函数讲解
- MATLAB 调用程序中断点问题
- 多线程的join()方法
- Xcode8更新后问题总结与解决
- HIVE备份之批量导出所有的HIVE建表字段
- C++设计模式——外观模式
- java面试题
- int indexOf(int ch,int fromIndex)函数
- 常见的应用层协议
- 【数学期望】Candy, ACM/ICPC Chengdu 2012, UVa1639 【精度】
- 【Android】如何避免Toast多次点击后一直提示,消除不了