`
java-admin
  • 浏览: 1365071 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

Thread.join()的用法

阅读更多

原文:http://www.j2medev.com/bbs/dispbbs.asp?boardid=3&Id=34846

 

 thread.join()应该是让当前线程block住,等thread执行完之后,再继续执行 。比如有3个线程在执行计算任务,必须等三个线程都执行完才能汇总,那么这时候在主线程里面让三个线程join,最后计算结果既可。代码显示如下。

import java.util.Random;

public class ThreadTest {

    public static void main(String[] args) {
        System.out.println("in " + Thread.currentThread().getName());
        long start = System.currentTimeMillis();
        CounterThread[] ct = new CounterThread[3];
        for (int i = 0; i < ct.length; i++) {
            ct[i] = new CounterThread();
            ct[i].start();
            try {
                ct[i].join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("join total time = " + (end - start));
        int result = 0;
        for (int j = 0; j < ct.length; j++) {
            result += ct[j].getResult();
        }
        System.out.println("the result is " + result);

    }

}

class CounterThread extends Thread {

    public CounterThread() {
    }

    private int result;

    public int getResult() {
        return result;
    }

    public void run() {
        try {
            int time = (new Random().nextInt() >>> 1) % 5000;
            Thread.sleep(time);
            System.out.println(Thread.currentThread().getName()
                    + " is blocked for " + time + "ms");
        } catch (InterruptedException ex) {

        }
        result = 5;
    }
}

输出结果:

in main
Thread-0 is blocked for 205ms
Thread-1 is blocked for 4226ms
Thread-2 is blocked for 4469ms
join total time = 8906
the result is 15

分享到:
评论

相关推荐

    C#多线程之Thread中Thread.Join()函数用法分析

    本文实例讲述了C#多线程之Thread中Thread.Join()函数用法。分享给大家供大家参考。具体分析如下: Thread.Join()在MSDN中的解释:Blocks the calling thread until a thread terminates 当NewThread调用Join方法的...

    java 中Thread.join()的使用方法

    主要介绍了java 中Thread.join()的使用方法的相关资料,需要的朋友可以参考下

    Java中Thread.join()的使用方法

    主要介绍了Java中Thread.join()的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    多线程并发代码的IntelliJ IDEA中调试方法.docx

    在main()方法中启动两个线程,然后调用thread1.join()和thread2.join(),以使主线程在“线程1”和“线程2”都返回结果之前不会进一步执行。 最后将两个线程的计算结果相加,得到100! + 100000! 下面就让我们使用...

    Python多线程中阻塞(join)与锁(Lock)使用误区解析

    join的错误用法 Thread.join() 作用为阻塞主线程,即在子线程未返回的时候,主线程等待其返回然后再继续执行. join不能与start在循环里连用 以下为错误代码,代码创建了5个线程,然后用一个循环激活线程,激活之后令其...

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

    本文对java Thread中join()方法进行介绍,join()的作用是让“主线程”等待“子线程”结束之后才能继续运行,大家参考使用吧

    对python 多线程中的守护线程与join的用法详解

    thread.join():在子线程完成运行之前,该子线程的父线程(一般就是主线程)将一直存在,也就是被阻塞 实例: #!/usr/bin/python # encoding: utf-8 import threading from time import ctime,sleep def func1(): ...

    java核心知识点整理.pdf

    本地方法区(线程私有) ................................................................................................................ 23 2.2.4. 堆(Heap-线程共享)-运行时数据区 ...........................

    详解C++ thread用法总结

    C++11的标准类std::thread对线程进行了封装,定义了C++11标准中的一些表示线程的类、用于互斥访问的类与方法等。应用C++11中的std::thread便于多线程程序的移值。 std::thread类成员函数: (1)、get_id:获取线程ID...

    Python语言基础:线程同步.pptx

    为了使不同线程在使用统一共享内存时线程之间互不影响,需要使用 “Lock()”方法。 具体实现: import threading def job1(): global A, lock lock.acquire() #内存上锁 for i in range(10): A += 1 print('job1', A...

    Python中threading模块join函数用法实例分析

    本文实例讲述了Python中threading模块join函数用法。分享给大家供大家参考。具体分析如下: join的作用是众所周知的,阻塞进程直到线程执行完毕。通用的做法是我们启动一批线程,最后join这些线程结束,例如: for ...

    JAVA核心知识点整理(有效)

    2.2.3. 本地方法区(线程私有) ................................................................................................................ 23 2.2.4. 堆(Heap-线程共享)-运行时数据区 .....................

    多线程机制

    7、 浅析 Java Thread.join() : java多线程实现主线程等待所有子线程执行完毕 16 8、 线程运行中抛出异常的处理 19 9、 Callable 有返回值的线程 20 10、 Callable结合FutureTask的多线程使用(免打扰模式) 24

    NET多线程同步方法详解

    .NET多线程同步方法详解(一):... 除了以上的这些对象之外实现线程同步的还可以使用Thread.Join方法。这种方法比较简单,当你在第一个线程运行时想等待第二个线程执行结果,那么你可以让第二个线程Join进来就可以了。

    C++11/14 线程调用类对象和线程传参的方法

    线程调用类对象 在前面的示例中,我们为线程任务使用了通常的函数。实际上,我们可以使用任何可调用对象或者lambda函数,如下调用类对象的例子: #include #include &lt;thread&gt; class MyFunctor ... t.join();

    C++11/14 线程中使用Lambda函数的方法

    多线程中使用lambda 在本篇文章中,主要介绍lambda函数在多线程中的使用。 先从下面的例子开始吧: #include #include &lt;thread&gt; int main() { std::thread t([]() { std::cout &lt;&lt; thread function\n; ...

    Python THREADING模块中的JOIN()方法深入理解

    join方法,如果一个线程或者一个函数在执行过程中要调用另外一个线程,并且待到其完成以后才能接着执行,那么在调用这个线程时可以使用被调用线程的join方法。 复制代码 代码如下: #-*- encoding: gb2312 -*- import...

    线程的基本概念、线程类、任务类、线程优先级、sleep()方法、yield()方法、join方法、interrupt()方法

    线程的基本概念、线程类...在Java中,可以使用Thread类的join()方法实现线程的合并。 线程的中断是指在一个线程中断另一个线程的执行。在Java中,可以使用Thread类的interrupt()方法实现线程的中断。(run方法执行完毕)

    thread-id:在Rust中获得唯一的线程ID

    ,标准库还没有公开执行此操作的方法,因此没有这种方法。 例子 use std :: thread; use thread_id; let handle = thread :: spawn ( move || { println! ( "spawned thread has id {}" , thread_id :: get ()); ...

Global site tag (gtag.js) - Google Analytics