原文: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方法的...
`Thread.join()`方法可以帮助开发者实现这种顺序,同时避免了使用更复杂的同步机制如`synchronized`关键字或`Lock`接口。 需要注意的是,频繁使用`join()`可能会导致程序的执行效率下降,因为它会导致线程的阻塞。...
在下面的示例代码中,我们创建了一个新的线程`oThread`,并使用`ThreadStart`委托传递一个方法`Back.Start`作为线程的入口点。接着,通过调用`oThread.Start()`启动线程。然而,需要注意的是,`Start()`方法的调用...
Java 中 Thread.join() 的使用方法 Thread.join() 是 Java 中的一个重要方法,该方法允许一个线程等待另一个线程的执行完成。下面我们将详细介绍 Thread.join() 的使用方法、源码分析和示例代码。 1. join() 的...
使用方法如下: ```java Thread childThread = new Thread(() -> { // 子线程的任务 }); childThread.start(); try { childThread.join(); // 主线程等待子线程结束 } catch (InterruptedException e) { e....
可以看到,join方法中使用了wait方法来实现等待,但是在这里没有看到哪里调用notify或者notifyAll方法。如果没有调用的话,那调用方线程会一直等待下去,那是哪里调用了唤醒它的方法呢? 通过查证得知,原来在线程...
C++11中关于std::thread的join详解 C++11引入了std::thread库,提供了对多线程编程的支持...在使用std::thread库时,我们必须了解join操作的使用和重要性。同时,我们也可以使用局部对象的机制来确保join操作的调用。
以上就是对Java线程中wait、await、sleep、yield、join用法的总结。这些方法在实际开发中,对于控制多线程运行的时序和协调非常关键。理解这些方法的正确使用方式是掌握Java并发编程的基础。同时,使用时需特别注意...
- Thread.dumpStack()打印当前线程的堆栈跟踪,join()方法等待线程终止。 9. **监控和调试** - Thread.currentThread()获取当前线程的引用,Thread.isAlive()判断线程是否存活,Thread.isDaemon()检查线程是否是...
以下是一个简单的`join()`使用示例,展示了如何在一个线程中调用另一个线程的`join()`方法: ```java public class JoinTest { public static void main(String[] args) { try { Thread thread1 = new Thread(()...
- **通过`Runnable`接口创建**:实现`Runnable`接口,定义`run()`方法,然后将`Runnable`对象作为参数传递给`Thread`类的构造函数,创建`Thread`对象并调用`start()`方法。 2. **线程状态** - 新建(New):线程...
5. **线程Join和Detach**:`join`方法使调用线程等待指定线程结束,而`detach`则将线程与调用线程分离,让其独立运行。 6. **线程组管理**:`boost::thread_group`类可以管理一组线程,方便地启动、停止和等待所有...
下面我们将深入探讨`Thread.join()`方法的工作原理、使用方法以及相关示例。 `Thread.join()`方法的基本语法如下: ```java public final void join() public final void join(long timeout) public final void ...
在实际应用中,join()方法通常配合Thread类的start()方法一起使用。start()方法用于启动新线程,而join()方法则用于确保当前线程等待该线程执行结束。例如: ```java Thread thread = new Thread(new Runnable() { ...
也可以是joinable,需要调用`join()`或`detach()`方法来处理线程的生命周期。 7. **线程安全**:线程安全指的是在多线程环境下,代码可以正确运行而不会出现数据不一致或其他错误。编写线程安全的代码是多线程编程...
线程可以通过sleep()、wait()等方法进入阻塞状态,join()方法可以等待其他线程结束。当run()方法执行完毕或遇到未捕获的异常时,线程死亡。 线程同步是Java中解决多线程并发问题的关键,主要包括synchronized关键字...
本示例着重讲解几个关键的线程方法,包括`Abort`,`Join`,`Sleep`,`Interrupt`以及`Start`,这些都是在实际开发中频繁使用的功能。 1. **Start方法**: `Thread.Start`方法用于启动新创建的线程。当你创建了一个...
Java提供了丰富的线程控制方法,如`start()`启动线程,`sleep()`使线程暂停一段时间,`join()`让当前线程等待指定线程结束,`yield()`让当前线程让出CPU执行权,以及`interrupt()`中断线程等。 Java还提供了同步...
以上只是部分Java线程编程的核心知识点,`javathread.part104.rar`中可能还会包含更多高级主题,如线程池的配置与优化、线程通信(例如`join()`, `Thread.sleep()`, `yield()`)以及并发工具类的深入探讨。...