`

java Thread Join方法学习(同步)(等待调用join的线程先执行)

阅读更多
join() 方法主要是让调用该方法的线程完成run方法里面的东西后,再执行join()方法后面的代码。

class ThreadTesterA implements Runnable {
 
    private int counter;
 
    @Override
    public void run() {
        while (counter <= 10) {
            System.out.print("Counter = " + counter + " ");
            counter++;
        }
        System.out.println();
    }
}
 
class ThreadTesterB implements Runnable {
 
    private int i;
 
    @Override
    public void run() {
        while (i <= 10) {
            System.out.print("i = " + i + " ");
            i++;
        }
        System.out.println();
    }
}
 
public class ThreadTester {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(new ThreadTesterA());
        Thread t2 = new Thread(new ThreadTesterB());
        t1.start();
        t1.join(); // wait t1 to be finished
        t2.start();
        t2.join(); // in this program, this may be removed
    }
}


package  mythread;

public   class  JoinThread  extends  Thread
{
     public   static int  n  =   0 ;

     public static   synchronized   void  inc(){
        n ++ ;
    }
     public   void  run(){
         for  ( int  i  =   0 ; i  <   10 ; i ++ )
             try 
            {
                inc();  //  n = n + 1 改成了 inc(); 
                sleep( 3 );  //  为了使运行结果更随机,延迟3毫秒 

            }
             catch  (Exception e)
            {
            }
    }

     public   static   void  main(String[] args)  throws  Exception{

        Thread threads[]  =   new  Thread[ 100 ];
         for  ( int  i  =   0 ; i  <  threads.length; i ++ )
             //  建立100个线程 
            threads[i]  =   new  JoinThread();
         for  ( int  i  =   0 ; i  <  threads.length; i ++ )
             //  运行刚才建立的100个线程 
            threads[i].start();
         for  ( int  i  =   0 ; i  <  threads.length; i ++ )
             //  100个线程都执行完后继续 必须加上join方法
            threads[i].join();  
        System.out.println( " n= "   +  JoinThread.n);
    }
} 


join方法的功能就是使异步执行的线程变成同步执行。也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后后需要使用一个由这个线程计算得到的值,就必须使用join方法。如果不使用join方法,就不能保证当执行到start方法后面的某条语句时,这个线程一定会执行完。而使用join方法后,直到这个线程退出,程序才会往下执行。



分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

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

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

    线程同步实践

    我知道的线程同步的方法主要是thread.join(),等待另一个线程的完成再继续进行本线程的工作。 不过在android中,mainThread控制着屏幕的刷新,如果调用在main thread中调用join将会导致屏幕无法刷新。 所以,我们...

    Python语言基础:线程等待.pptx

    为了避免线程这种复杂的执行方式,让程序顺序输出,需要在启动线程后调用“join()”方法使线程等待。 线程等待 线程等待,具体实现: import threading import time def thread1_job(): print('T1 start\n') time....

    使用Java多线程实现下载多个文件.txt

    这段代码实现了一个下载器,可以同时下载多个文件。其中,构造函数MultiThreadDownloader接收一个URL数组和两个整数数组作为参数,分别表示每个URL的起始...最后,通过调用每个线程的join()方法等待所有线程执行完毕。

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

    当NewThread调用Join方法的时候,MainThread就被停止执行, 直到NewThread线程执行完毕。 Thread oThread = new Thread(new ThreadStart(oAlpha.Beta)); oThread.Start(); while (!oThread.IsAlive) //表示线程当

    Java开发技术大全(500个源代码).

    demoSynchrony.java 演示线程的同步 setDataThread.java 设置数据的线程类 readDataThread.java 读取数据的线程类 demoEnhanceThread.java 使用自己定义的线程类示例 producer_consumer.java 演示生产者-消费者...

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

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

    java7源码-thread:多线程相关的学习

    Waiting:具有指定等待时间的等待线程的线程状态(sleep、wait、join、parkNanos、parkUntil) 6.Terminated:终止线程的线程状态。线程正常执行完成或出现异常 ​ 代码:Demo01 线程切换状态图 线程终止 不正确的线程...

    linux系统编程之线程.zip

    exit,则整个进程的所有线程都终止,由于从main函数return也相当于调用exit,为了防止新创建的线程还没有得到执行就终止,我们在main函数return之前延时1秒,这只是一种权宜之计,即使主线程等待1秒,内核也不一定会...

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

    这将阻塞正在调用的线程,直到被调用join()方法的线程结束。(好难翻译,应该是这个意思) 哈哈,这个易懂。 join方法,如果一个线程或者一个函数在执行过程中要调用另外一个线程,并且待到其完成以后才能接着执行,...

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

    在使用std::thread的时候,对创建的线程有两种操作:等待/分离,也就是join/detach操作。join()操作是在std::thread t(func)后“某个”合适的地方调用,其作用是回收对应创建的线程的资源,避免造成资源的泄露。...

    ThreadStateProject

    thread state test project 1.对比java中的sleep()和wait()的区别 2.等待调用join方法的线程结束,再继续执行

    疯狂JAVA讲义

    学生提问:老师,我想学习Java编程,到底是学习Eclipse好呢,还是学习JBuilder好呢? 21 1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种...

    并行计算课程设计(代码+执行文件+文档)

    先创建ThreadStart代理,指定要由该线程执行的线程函数,然后将ThreadStart代理传递给Thread类的构造函数,调用Thread类的Start方法启动新的线程然后调用Join()方法保证应用程序域等待异步程序结束后才终止运行。...

    并行计算课程设计(报告+代码+可执行文件)

    先创建ThreadStart代理,指定要由该线程执行的线程函数,然后将ThreadStart代理传递给Thread类的构造函数,调用Thread类的Start方法启动新的线程然后调用Join()方法保证应用程序域等待异步程序结束后才终止运行。...

    shigeqiu#shigeqiu-blog#2_Thread类中的方法1

    /*join的意思是使得放弃当前线程的执行,并返回对应的线程,例如下面代码的意思就是:程序在main线程中调用t1线程的join方法,则main线程放弃cpu控

    Java高级程序设计测试含答案.docx

    update() 在线程同步中,为了唤醒另一个等待的线程,使用下列方法 () [单选题] * A.sleep() B.wait() C.notify()(正确答案) D. join() Java高级程序设计测试含答案全文共40页,当前为第4页。Java提供以下哪个...

    Python快速而美丽[v1.0.0][控制线程]

    Thread类提供了join()函数,它用来让一个线程等待另一个线程执行完成,当程序的执行过程中线程A调用了线程B的join()函数时,线程A将被阻塞,直到线程B执行完成。 该方法的设计主要用于将大的问题拆分成若干个小问题...

    Python多线程编程简单介绍

    – target 执行方法 – name 线程名字 – args target执行的元组参数 – kwargs target执行的字典参数 Thread对象函数 函数 描述 start() 开始线程的执行 run() 定义线程的功能的函数(一般会被子类重写) join...

    Java开发技术大全 电子版

    8.3.3使用isAlive()和join()等待子线程结束273 8.3.4设置线程优先级275 8.4线程的通信与协调277 8.4.1线程的互斥277 8.4.2线程的同步279 8.4.3暂停、恢复和停止线程282 8.4.4生产者-消费者问题实例284 8.5本...

Global site tag (gtag.js) - Google Analytics