java多线程join

目的:程序执行完任务后,再执行其他的任务。

实现原理:

使用Thread类的join()方法时。当一个线程对象的join()方法被调用是,调用它的线程将被挂起,直到这个线程对象完成它的任务。

代码:引用的java7并发编程实战手册示例代码

package com.packtpub.java7.concurrency.chapter1.recipe6.task;

import java.util.Date;

import java.util.concurrent.TimeUnit;

/**

* Class that simulates an initialization operation. It sleeps during four seconds

*

*/

public class DataSourcesLoader implements Runnable {

/**
 * Main method of the class
 */
@Override
public void run() {

    // Writes a messsage
    System.out.printf("Begining data sources loading: %s\n",new Date());
    // Sleeps four seconds
    try {
        TimeUnit.SECONDS.sleep(4);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    // Writes a message
    System.out.printf("Data sources loading has finished: %s\n",new Date());
}

}

package com.packtpub.java7.concurrency.chapter1.recipe6.task;

import java.util.Date;

import java.util.concurrent.TimeUnit;

/**

* Class that simulates an initialization operation. It sleeps during six seconds

*

*/

public class NetworkConnectionsLoader implements Runnable {

/**
 * Main method of the class
 */
@Override
public void run() {
    // Writes a message
    System.out.printf("Begining network connections loading: %s\n",new Date());
    // Sleep six seconds
    try {
        TimeUnit.SECONDS.sleep(6);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    // Writes a message
    System.out.printf("Network connections loading has finished: %s\n",new Date());
}

}

package com.packtpub.java7.concurrency.chapter1.recipe6.core;

import java.util.Date;

import com.packtpub.java7.concurrency.chapter1.recipe6.task.DataSourcesLoader;

import com.packtpub.java7.concurrency.chapter1.recipe6.task.NetworkConnectionsLoader;

/**

* Main class of the Example. Create and start two initialization tasks

* and wait for their finish

*

*/

public class Main {

/**
 * Main method of the class. Create and star two initialization tasks
 * and wait for their finish
 * @param args
 */
public static void main(String[] args) {

    // Creates and starts a DataSourceLoader runnable object
    DataSourcesLoader dsLoader = new DataSourcesLoader();
    Thread thread1 = new Thread(dsLoader,"DataSourceThread");
    thread1.start();

    // Creates and starts a NetworkConnectionsLoader runnable object
    NetworkConnectionsLoader ncLoader = new NetworkConnectionsLoader();
    Thread thread2 = new Thread(ncLoader,"NetworkConnectionLoader");
    thread2.start();

    // Wait for the finalization of the two threads
    try {
        thread1.join();
        thread2.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    // Waits a message
    System.out.printf("Main: Configuration has been loaded: %s\n",new Date());
}

}

扩展:

通过查看源码看到join的重载方法

join():

join(long,int)

本质调用的都是join(long)

通过查看反编译后的源代码,可知道只要线程运行结束(isAlive)或者时间到了之后(delay<=0;break;),被挂起的线程将再次可以执行。

时间: 2024-10-31 12:57:03

java多线程join的相关文章

java多线程--join函数

1. join()介绍 join() 定义在Thread.java中. join() 的作用:让"主线程"等待"子线程"结束之后才能继续运行.这句话可能有点晦涩,我们还是通过例子去理解: // 主线程 public class Father extends Thread { public void run() { Son s = new Son(); s.start(); s.join(); ... } } // 子线程 public class Son exten

java 多线程-join插队

join合并线程,插队线程,将此线程执行完成后,再执行其他线程,其他线程阻塞join是一个成员方法,必须通过Thread对象调用 public class n { public static void main(String[]args) throws InterruptedException { Thread t =new Thread(()-> { for(int i=0;i<5;i++) { System.out.println("a"+i); } }); t.sta

thread.join函数,java多线程中的join函数解析

join函数的作用,是让当前线程等待,直到调用join()的 线程结束或者等到一段时间,我们来看以下代码 1 package mian; 2 3 4 public class simpleplela { 5 static void threadMessage(String message) { 6 String threadName = 7 Thread.currentThread().getName(); 8 9 System.out.println(threadName+" "+m

java多线程控制函数setDaemon,join,interupt

1.setDeamon 设置线程为后台运行的函数 public class SetDaemon { public static void main(String[] args) throws InterruptedException { Thread tt=new Thread(new ThreadTest()); tt.setDaemon(true); //设置程序为后台运行 tt.start(); Thread.sleep(3); } } class ThreadTest implement

java多线程中join用法

thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B. package com.wzs; /** * Java多线程中join用法 * * @author Administrator * */ public class JoinTest { public static void main(String[] args) { BThread bThread = new B

Java多线程中join、yield、sleep方法详解

在Java多线程编程中,Thread类是其中一个核心和关键的角色.因此,对该类中一些基础常用方法的理解和熟练使用是开发多线程代码的基础.本篇主要总结一下Thread中常用的一些静态方法的含义及代码中的使用. sleep方法 源码如下: /** * Causes the currently executing thread to sleep (temporarily cease * execution) for the specified number of milliseconds, subje

Java多线程学习:Join()

方法join的作用是使所属的线程对象x正常执行run()方法中的任务,而使当前线程Z进行无限期的阻塞,等待线程X销毁后再继续执行线程Z后面的代码.一般用于子线程先执行完毕再继续执行主线程的情况. 但是join方法后面的代码会不会提前执行呢?看下面的代码 1 public class ThreadA extends Thread { 2 3 private ThreadB threadB; 4 5 public ThreadA(ThreadB threadB) { 6 super(); 7 thi

Rhythmk 一步一步学 JAVA (21) JAVA 多线程

1.JAVA多线程简单示例 1.1 .Thread  集成接口 Runnable 1.2 .线程状态,可以通过  Thread.getState()获取线程状态: New (新创建) Runnable (可以运行) Blocked  (被阻塞) Waiting  (等待) Timed waiting (计时等待) Terminated  (被终止) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

(转载)Java多线程入门理解

转载出处http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更上一个台阶呢?如果你觉得此文很简单,那推荐你看看Java并发包的的线程池(Java并发编程与技术内幕:线程池深入理解),或者看这个专栏:Java并发编程与技术内幕.你将会对Java里头的高并发场景下的线程有更加深刻的理解. 目录(?)[-] 一扩展javalangThread类 二实现javalan