java join 方法的使用

在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程往往将早于子线程结束之前结束。这时,如果主线程想等待子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据中的值,就要用到join()方法了,方法join()的作用是等待线程对象被销毁。

代码示例:

package com.test;

public class TestJoin extends Thread {
    @Override
    public void run() {
        try {
            int secondValue = (int)(Math.random() * 10000);
            System.out.println(secondValue);
            Thread.sleep(secondValue);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
package com.test;

public class Run {

    public static void main(String[] args) {

        try {
            TestJoin join = new TestJoin();
            join.start();
            join.join();
            System.out.println("我想当线程对象执行完毕后我再执行");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
运行结果:
7694
我相当线程对象执行完毕后我再执行

ps:如果把Run.java中的join.join()方法注释掉, 则会先打印 “我想当线程对象执行完毕后我再执行”

方法join与异常:

  在join过程中,如果当前线程对象被中断,则当前线程出现异常。

join(long)中的参数是设定等待时间。

方法join(long)与sleep(long)的区别:

  方法join(long)的功能个在内部是使用wait(long)方法来实现的,所以join(long)方法具有释放锁的特点。而Thread.sleep(long)方法却不释放锁.

原文地址:https://www.cnblogs.com/gouge/p/9118473.html

时间: 2024-10-22 04:02:45

java join 方法的使用的相关文章

java join()方法

当A线程执行到了B线程的join()方法时,A就会等待,等B线程都执行完,A才会执行. join可以用来临时加入线程执行. class Demo implements Runnable{ @Override public void run() { for (int i = 0; i < 20; i++) { System.out.println(Thread.currentThread().getName()+"......"+i); } } } public class Joi

[java] java 线程join方法详解

join方法的作用是使所属线程对象正常执行run方法,而对当前线程无限期阻塞,直到所属线程销毁后再执行当前线程的逻辑. 一.先看普通的无join方法NoJoin.java public class NoJoin extends Thread{ @Override public void run() { try { long count = (long)(Math.random()*100); System.out.println(count); Thread.sleep(count); } ca

Java多线程中的join方法

新建一个Thread,代码如下: 1 package com.thread.test; 2 3 public class MyThread extends Thread { 4 private String name; 5 public MyThread(String name) { 6 this.name = name; 7 } 8 @Override 9 public void run() { 10 for (int i = 0; i < 100; i++) { 11 System.out.

java多线程基本概述(七)——join()方法

在很多情况下,主线程创建并启动子线程,如果子线程中有大量的耗时运算,主线程将早于子线程结束,如果想让主线程等待子线程结束后再结束,那么我们可以使用join()方法.调用join()方法的意思是当前线程使调用了该方法的线程执行完成然后再执行自己本身.api文档如下: public final void join(long millis, int nanos) throws InterruptedException Waits at most millis milliseconds plus nan

模拟做饭系统(java+线程中的join方法)

(一)项目框架分析 妈妈要去做饭,发现没有酱油,让儿子去买酱油,然后回来做饭. 根据面向对象的思想,有两个对象,妈妈和儿子 主要有两个方法: (一)没有线程控制(即儿子没有买酱油回来妈妈就做好饭了)+(没有调用jion方法) (二)有线程控制(妈妈进程和儿子进程又先后影响)+(调用jion方法) 项目的结构图: (二)没有进程控制mintak Son.java主要是模拟儿子的行动,儿子买酱油的行动(与有进程控制的源程序相同) 代码如下: public class Son implements R

java的join方法

在某个线程中调用另一个线程的join方法,是将当前的cpu让给另一个线程,等到规定的时间到了或另一个线程执行结束后,自己再执行. package test; public class TestJoin1 { public static void main(String[] args) throws InterruptedException { TheOtherThread tot = new TheOtherThread(); Thread t = new Thread(tot); t.star

JAVA中sleep()、wait()、yield()、join()方法浅析

线程退出最好自己实现,在运行状态中一直检验一个状态,如果这个状态为真,就一直运行,如果外界更改了这个状态变量,那么线程就停止运行. 1.sleep()方法 在指定时间内让当前正在执行的线程暂停执行,但不会释放“锁标志”.不推荐使用. sleep()使当前线程进入阻塞状态,在指定时间内不会执行. 2.wait()方法 在其他线程调用对象的notify或notifyAll方法前,导致当前线程等待.线程会释放掉它所占有的“锁标志”,从而使别的线程有机会抢占该锁. 当前线程必须拥有当前对象锁.如果当前线

java Thread方法解析: sleep join wait notify notifyAll

转载自: sleep(),yield(),wait()区别详解:http://dylanxu.iteye.com/blog/1322066 join方法详解:http://www.open-open.com/lib/view/open1371741636171.html 区别说明: sleep(millSec) 方法:使方法所属线程暂停millSec毫秒,使得其它线程有机会被执行,但是不会释放对象锁. yield()方法:类似sleep方法,但是不能指定时间,另外只能让同优先级的线程具有被执行的

java线程Thread的join方法。

1,方法的作用: 父线程等待子线程的执行. 如果是join或者join(0),即等待时长是0,父线程就会一直等到子线程执行结束, 如果是join(time),即等待时长是time数值,那父线程等待时长视情况而定: 第一种:子线程执行时长不需要time时长,那么父线程就可能不会等待到time时长,为什么是可能呢?是不是要考虑其他线程(不包括父线程,和子线程以外的线程),他也可能让父线程等待的(没有获取到cpu时间片等原因), 第二种:子线程执行时长超过time时长,那么父线程的等待时长,至少是ti