`
java-admin
  • 浏览: 1384186 次
  • 性别: 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()的使用方法

    `Thread.join()`方法可以帮助开发者实现这种顺序,同时避免了使用更复杂的同步机制如`synchronized`关键字或`Lock`接口。 需要注意的是,频繁使用`join()`可能会导致程序的执行效率下降,因为它会导致线程的阻塞。...

    C#多线程之Thread中Thread.IsAlive属性用法分析

    在下面的示例代码中,我们创建了一个新的线程`oThread`,并使用`ThreadStart`委托传递一个方法`Back.Start`作为线程的入口点。接着,通过调用`oThread.Start()`启动线程。然而,需要注意的是,`Start()`方法的调用...

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

    Java 中 Thread.join() 的使用方法 Thread.join() 是 Java 中的一个重要方法,该方法允许一个线程等待另一个线程的执行完成。下面我们将详细介绍 Thread.join() 的使用方法、源码分析和示例代码。 1. join() 的...

    Thread.jone

    使用方法如下: ```java Thread childThread = new Thread(() -&gt; { // 子线程的任务 }); childThread.start(); try { childThread.join(); // 主线程等待子线程结束 } catch (InterruptedException e) { e....

    浅谈Java线程Thread.join方法解析

    可以看到,join方法中使用了wait方法来实现等待,但是在这里没有看到哪里调用notify或者notifyAll方法。如果没有调用的话,那调用方线程会一直等待下去,那是哪里调用了唤醒它的方法呢? 通过查证得知,原来在线程...

    c++11中关于std::thread的join的详解

    C++11中关于std::thread的join详解 C++11引入了std::thread库,提供了对多线程编程的支持...在使用std::thread库时,我们必须了解join操作的使用和重要性。同时,我们也可以使用局部对象的机制来确保join操作的调用。

    Java线程中wait,await,sleep,yield,join用法总结.pdf

    以上就是对Java线程中wait、await、sleep、yield、join用法的总结。这些方法在实际开发中,对于控制多线程运行的时序和协调非常关键。理解这些方法的正确使用方式是掌握Java并发编程的基础。同时,使用时需特别注意...

    JavaThread.pdf

    - Thread.dumpStack()打印当前线程的堆栈跟踪,join()方法等待线程终止。 9. **监控和调试** - Thread.currentThread()获取当前线程的引用,Thread.isAlive()判断线程是否存活,Thread.isDaemon()检查线程是否是...

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

    以下是一个简单的`join()`使用示例,展示了如何在一个线程中调用另一个线程的`join()`方法: ```java public class JoinTest { public static void main(String[] args) { try { Thread thread1 = new Thread(()...

    Java课件\thread.rar

    - **通过`Runnable`接口创建**:实现`Runnable`接口,定义`run()`方法,然后将`Runnable`对象作为参数传递给`Thread`类的构造函数,创建`Thread`对象并调用`start()`方法。 2. **线程状态** - 新建(New):线程...

    boost的Thread.lib(VC 6.0++)

    5. **线程Join和Detach**:`join`方法使调用线程等待指定线程结束,而`detach`则将线程与调用线程分离,让其独立运行。 6. **线程组管理**:`boost::thread_group`类可以管理一组线程,方便地启动、停止和等待所有...

    Java之Thread的join方法实例

    下面我们将深入探讨`Thread.join()`方法的工作原理、使用方法以及相关示例。 `Thread.join()`方法的基本语法如下: ```java public final void join() public final void join(long timeout) public final void ...

    java 携子之手 与子偕老(join)

    在实际应用中,join()方法通常配合Thread类的start()方法一起使用。start()方法用于启动新线程,而join()方法则用于确保当前线程等待该线程执行结束。例如: ```java Thread thread = new Thread(new Runnable() { ...

    C++_thread.zip

    也可以是joinable,需要调用`join()`或`detach()`方法来处理线程的生命周期。 7. **线程安全**:线程安全指的是在多线程环境下,代码可以正确运行而不会出现数据不一致或其他错误。编写线程安全的代码是多线程编程...

    javathread.part02.rar

    线程可以通过sleep()、wait()等方法进入阻塞状态,join()方法可以等待其他线程结束。当run()方法执行完毕或遇到未捕获的异常时,线程死亡。 线程同步是Java中解决多线程并发问题的关键,主要包括synchronized关键字...

    线程常用方法示例

    本示例着重讲解几个关键的线程方法,包括`Abort`,`Join`,`Sleep`,`Interrupt`以及`Start`,这些都是在实际开发中频繁使用的功能。 1. **Start方法**: `Thread.Start`方法用于启动新创建的线程。当你创建了一个...

    javathread.part05.rar

    Java提供了丰富的线程控制方法,如`start()`启动线程,`sleep()`使线程暂停一段时间,`join()`让当前线程等待指定线程结束,`yield()`让当前线程让出CPU执行权,以及`interrupt()`中断线程等。 Java还提供了同步...

    javathread.part104.rar

    以上只是部分Java线程编程的核心知识点,`javathread.part104.rar`中可能还会包含更多高级主题,如线程池的配置与优化、线程通信(例如`join()`, `Thread.sleep()`, `yield()`)以及并发工具类的深入探讨。...

Global site tag (gtag.js) - Google Analytics