原文: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()函数用法。分享给大家供大家参考。具体分析如下: Thread.Join()在MSDN中的解释:Blocks the calling thread until a thread terminates 当NewThread调用Join方法的...
主要介绍了java 中Thread.join()的使用方法的相关资料,需要的朋友可以参考下
主要介绍了Java中Thread.join()的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
在main()方法中启动两个线程,然后调用thread1.join()和thread2.join(),以使主线程在“线程1”和“线程2”都返回结果之前不会进一步执行。 最后将两个线程的计算结果相加,得到100! + 100000! 下面就让我们使用...
join的错误用法 Thread.join() 作用为阻塞主线程,即在子线程未返回的时候,主线程等待其返回然后再继续执行. join不能与start在循环里连用 以下为错误代码,代码创建了5个线程,然后用一个循环激活线程,激活之后令其...
本文对java Thread中join()方法进行介绍,join()的作用是让“主线程”等待“子线程”结束之后才能继续运行,大家参考使用吧
thread.join():在子线程完成运行之前,该子线程的父线程(一般就是主线程)将一直存在,也就是被阻塞 实例: #!/usr/bin/python # encoding: utf-8 import threading from time import ctime,sleep def func1(): ...
本地方法区(线程私有) ................................................................................................................ 23 2.2.4. 堆(Heap-线程共享)-运行时数据区 ...........................
C++11的标准类std::thread对线程进行了封装,定义了C++11标准中的一些表示线程的类、用于互斥访问的类与方法等。应用C++11中的std::thread便于多线程程序的移值。 std::thread类成员函数: (1)、get_id:获取线程ID...
为了使不同线程在使用统一共享内存时线程之间互不影响,需要使用 “Lock()”方法。 具体实现: import threading def job1(): global A, lock lock.acquire() #内存上锁 for i in range(10): A += 1 print('job1', A...
本文实例讲述了Python中threading模块join函数用法。分享给大家供大家参考。具体分析如下: join的作用是众所周知的,阻塞进程直到线程执行完毕。通用的做法是我们启动一批线程,最后join这些线程结束,例如: for ...
2.2.3. 本地方法区(线程私有) ................................................................................................................ 23 2.2.4. 堆(Heap-线程共享)-运行时数据区 .....................
7、 浅析 Java Thread.join() : java多线程实现主线程等待所有子线程执行完毕 16 8、 线程运行中抛出异常的处理 19 9、 Callable 有返回值的线程 20 10、 Callable结合FutureTask的多线程使用(免打扰模式) 24
.NET多线程同步方法详解(一):... 除了以上的这些对象之外实现线程同步的还可以使用Thread.Join方法。这种方法比较简单,当你在第一个线程运行时想等待第二个线程执行结果,那么你可以让第二个线程Join进来就可以了。
线程调用类对象 在前面的示例中,我们为线程任务使用了通常的函数。实际上,我们可以使用任何可调用对象或者lambda函数,如下调用类对象的例子: #include #include <thread> class MyFunctor ... t.join();
多线程中使用lambda 在本篇文章中,主要介绍lambda函数在多线程中的使用。 先从下面的例子开始吧: #include #include <thread> int main() { std::thread t([]() { std::cout << thread function\n; ...
join方法,如果一个线程或者一个函数在执行过程中要调用另外一个线程,并且待到其完成以后才能接着执行,那么在调用这个线程时可以使用被调用线程的join方法。 复制代码 代码如下: #-*- encoding: gb2312 -*- import...
线程的基本概念、线程类...在Java中,可以使用Thread类的join()方法实现线程的合并。 线程的中断是指在一个线程中断另一个线程的执行。在Java中,可以使用Thread类的interrupt()方法实现线程的中断。(run方法执行完毕)
,标准库还没有公开执行此操作的方法,因此没有这种方法。 例子 use std :: thread; use thread_id; let handle = thread :: spawn ( move || { println! ( "spawned thread has id {}" , thread_id :: get ()); ...