Java中join线程操作实例分析

本文实例讲述了Java中join线程操作。分享给大家供大家参考,具体如下:

一 点睛

Tread提供了让一个线程等待另外一个线程完成的方法——join()方法。当在某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被join()方法加入的join线程执行完后为止。

join()方法通常由使用线程的程序调用,以将大问题划分成许多小问题,每个小问题分配一个线程。当所有小问题都得到处理后,再调用主线程来进一步操作。

二 代码

public class JoinThread extends Thread
{
   // 提供一个有参数的构造器,用于设置该线程的名字
   public JoinThread(String name)
   {
      super(name);
   }
   // 重写run()方法,定义线程执行体
   public void run()
   {
      for (int i = 0; i < 100 ; i++ )
      {
        System.out.println(getName() + " " + i);
      }
   }
   public static void main(String[] args)throws Exception
   {
      // 启动子线程
      new JoinThread("新线程").start();
      for (int i = 0; i < 100 ; i++ )
      {
        if (i == 20)
        {
           JoinThread jt = new JoinThread("被Join的线程");
           jt.start();
           // main线程调用了jt线程的join()方法,main线程
           // 必须等jt执行结束才会向下执行
           jt.join();
        }
        System.out.println(Thread.currentThread().getName()
           + " " + i);
      }
   }
}

三 运行结果

main  0
main  1
main  2
main  3
main  4
main  5
main  6
新线程  0
......
新线程  11
新线程  12
新线程  13
main  7
main  8
......
main  16
main  17
新线程  14
main  18
main  19
新线程  15
新线程  16
......
新线程  31
被Join的线程  0
新线程  32
被Join的线程  1
新线程  33
被Join的线程  2
新线程  34
被Join的线程  3
新线程  35
新线程  36
新线程  37
新线程  38
新线程  39
被Join的线程  4
被Join的线程  5
......
被Join的线程  13
被Join的线程  14
新线程  40
被Join的线程  15
被Join的线程  16
被Join的线程  17
新线程  41
新线程  42
被Join的线程  18
被Join的线程  19
......
被Join的线程  38
被Join的线程  39
新线程  43
新线程  44
新线程  45
被Join的线程  40
被Join的线程  41
被Join的线程  42
被Join的线程  43
新线程  46
新线程  47
新线程  48
......
新线程  60
新线程  61
被Join的线程  44
......
被Join的线程  98
被Join的线程  99
新线程  62
新线程  63
......
新线程  98
新线程  99
main  20
main  21
main  22
main  23

四 说明

1 程序开始是mian线程和新线程并发执行。

2 当i为20时,main线程开始等待“被Join的线程”执行完成,此时“被Join的线程”和“新线程”并发执行。

3 当“被Join的线程”执行完成,main线程继续运行,此时“main”和“新线程”并发执行。

更多java相关内容感兴趣的读者可查看本站专题:《Java进程与线程操作技巧总结》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

时间: 2019-09-14

JAVA多线程之方法 JOIN详解及实例代码

JAVA多线程 JOIN 对于Java开发人员,多线程应该是必须熟练应用的知识点,特别是开发基于Java语言的产品.本文将深入浅出的表述Java多线程的知识点,在后续的系列里将侧重于Java5由Doug Lea教授提供的Concurrent并行包的设计思想以及具体实现与应用. 如何才能深入浅出呢,我的理解是带着问题,而不是泛泛的看.所以该系列基本以解决问题为主,当然我也非常希望读者能够提出更好的解决问题的方案以及提出更多的问题.由于水平有限,如果有什么错误之处,请大家提出,共同讨论,总之,我希望

浅谈Java线程Thread.join方法解析

join字面上是加入的意思,我们先看看join方法的解释和实现. /** * Waits for this thread to die. * 调用方线程(调用join方法的线程)执行等待操作,直到被调用的线程(join方法所属的线程)结束,再被唤醒 * <p> An invocation of this method behaves in exactly the same * way as the invocation * * * @throws InterruptedException *

Java多线程中关于join方法的使用实例解析

先上代码 新建一个Thread,代码如下: package com.thread.test; public class MyThread extends Thread { private String name; public MyThread(String name) { this.name = name; } @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println(name+"[&

java基本教程之join方法详解 java多线程教程

本章涉及到的内容包括:1. join()介绍2. join()源码分析(基于JDK1.7.0_40)3. join()示例 1. join()介绍join() 定义在Thread.java中.join() 的作用:让"主线程"等待"子线程"结束之后才能继续运行.这句话可能有点晦涩,我们还是通过例子去理解: 复制代码 代码如下: // 主线程public class Father extends Thread {    public void run() {     

Java多线程join方法实例代码

本文研究的主要是Java多线程中join方法的使用问题,以下文为具体实例. Thread的非静态方法join()让一个线程B"加入"到另外一个线程A的尾部.在A执行完毕之前,B不能工作.例如: Thread t = new MyThread(); t.start(); t.join(); 另外,join()方法还有带超时限制的重载版本. 例如t.join(5000);则让线程等待5000毫秒,如果超过这个时间,则停止等待,变为可运行状态. 线程的加入join()对线程栈导致的结果是线程

Java join 线程控制用法

JDK说明: joinpublic final void join()                throws InterruptedException等待该线程终止. 抛出:InterruptedException - 如果任何线程中断了当前线程.当抛出该异常时,当前线程的中断状态 被清除测试代码: 复制代码 代码如下: public class MyThread extends Thread { public static void main(String[] args) throws

java线程之join方法的使用介绍

在上面的例子中多次使用到了Thread类的join方法.我想大家可能已经猜出来join方法的功能是什么了.对,join方法的功能就是使异步执行的线程变成同步执行.也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后后需要使用一个由这个线程计算得到的值,就必须使用join方法.如果不使用join方法,就不能保证当执行到start方法后面的某条语句时,这个线程一定会执行完.而使用join方法后,直到这个线程退出,程序才会往下执行.下面的代码演示了join的用法.

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

join: 当A线程执行到了B线程的.join()方法时,A就会等待.等B线程都执行完,A才会执行. join可以用来临时加入线程执行. 1.线程使用join方法,主线程就停下,等它执行完,那么如果该线程冻结了,主线程就挂了,这也是为什么线程要抛异常的原因 2.当两个或以上线程开启了,这个A线程才使用join方法,那么主线程还是停下,这几个个线程交替进行,直到A执行完,主线程才复活 1. tostring(),方法,获取线程具体的名字,优先级 2. 优先级代表抢资源的频率 3. java中设置有

Java线程编程中isAlive()和join()的使用详解

一个线程如何知道另一线程已经结束?Thread类提供了回答此问题的方法. 有两种方法可以判定一个线程是否结束.第一,可以在线程中调用isAlive().这种方法由Thread定义,它的通常形式如下: final boolean isAlive( ) 如果所调用线程仍在运行,isAlive()方法返回true,如果不是则返回false.但isAlive()很少用到,等待线程结束的更常用的方法是调用join(),描述如下: final void join( ) throws InterruptedE

java多线程编程之join方法的使用示例

在上面的例子中多次使用到了Thread类的join方法.我想大家可能已经猜出来join方法的功能是什么了.对,join方法的功能就是使异步执行的线程变成同步执行.也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后后需要使用一个由这个线程计算得到的值,就必须使用join方法.如果不使用join方法,就不能保证当执行到start方法后面的某条语句时,这个线程一定会执行完.而使用join方法后,直到这个线程退出,程序才会往下执行.下面的代码演示了join的用法.

Java多线程ForkJoinPool实例详解

引言 java 7提供了另外一个很有用的线程池框架,Fork/Join框架 理论 Fork/Join框架主要有以下两个类组成. * ForkJoinPool 这个类实现了ExecutorService接口和工作窃取算法(Work-Stealing Algorithm).它管理工作者线程,并提供任务的状态信息,以及任务的执行信息 * ForkJoinTask 这个类是一个将在ForkJoinPool执行的任务的基类. Fork/Join框架提供了在一个任务里执行fork()和join()操作的机制

Java使用join方法暂停当前线程

目标线程的join方法暂停当前线程,直到目前线程完成(从run()方法返回),供大家参考,具体内容如下 Java代码: package Threads; import java.io.IOException; /** * Created by Frank */ public class Join { public static void main(String[] args) { Thread t = new Thread() { public void run() { System.out.p

Python线程中对join方法的运用的教程

join 方法:阻塞线程 , 直到该线程执行完毕 因此  ,可以对join加一个超时操作 , join([timeout]),超过设置时间,就不再阻塞线程 jion加上还有一个后果就是, 子线程和主线程绑定在一起 , 直到子线程运行完毕,才开始执行子线程. 代码 有join: 在CODE上查看代码片派生到我的代码片 #-*- coding: UTF-8 -*- import threading from time import sleep def fun(): 在CODE上查看代码片派生到我的代

Java使用synchronized修饰方法来同步线程的实例演示

Java中可以使用关键字synchronized进行线程同步控制,实现关键资源顺序访问,避免由于多线程并发执行导致的数据不一致性等问题.synchronized的原理是对象监视器(锁),只有获取到监视器的线程才能继续执行,否则线程会等待获取监视器.Java中每个对象或者类都有一把锁与之相关联,对于对象来说,监视的是这个对象的实例变量,对于类来说,监视的是类变量(一个类本身是类Class的对象,所以与类关联的锁也是对象锁).synchronized关键字使用方式有两种:synchronized方法

详解Java多线程编程中CountDownLatch阻塞线程的方法

直译过来就是倒计数(CountDown)门闩(Latch).倒计数不用说,门闩的意思顾名思义就是阻止前进.在这里就是指 CountDownLatch.await() 方法在倒计数为0之前会阻塞当前线程. CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. CountDownLatch 的作用和 Thread.join() 方法类似,可用于一组线程和另外一组线程的协作.例如,主线程在做一项工作之前需要一系列的准备工作,只有这些准备工

Java之Thread的join方法实例

本文实例讲述了Java之Thread的join方法.分享给大家供大家参考.具体实现方法如下: join public final void join() throws InterruptedException等待该线程终止. 抛出: InterruptedException - 如果任何线程中断了当前线程.当抛出该异常时,当前线程的中断状态 被清除.   下面的例子 通俗的讲,就是A调用join方法后,只有等A所在的线程不再运行,才会将进程分配出去 复制代码 代码如下: public class