`

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方法后,直到这个线程退出,程序才会往下执行。



分享到:
评论
发表评论

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

相关推荐

    Java多线程--等待所有子线程执行完的五种方法.docx

    `Thread.join()`方法允许主线程等待特定线程结束。例如,如果有多个子线程,我们可以在每个子线程执行`join()`,这样主线程会依次等待每个子线程完成。例如: ```java Thread thread1 = new Thread(...); Thread ...

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

    join()方法是Thread类中的一个实例方法,当一个线程A执行了threadB.join()操作时,线程A会等待线程B执行完成后才继续执行。这通常用于需要等待子线程完成之后才继续执行的情况。 以上就是对Java线程中wait、await、...

    Java多线程实现异步调用实例

    `Thread.join()`可以让主线程等待子线程完成后再继续执行。 “异步”标签则涉及到了程序设计中的非阻塞特性,有助于提升系统的并发能力和响应性。Java 8引入的CompletableFuture提供了一种更高级的异步编程模型,...

    Java线程之join_动力节点Java学院整理

    Java线程中的`join()`方法是一个非常重要的同步工具,它允许一个线程(通常为主线程)等待另一个线程(子线程)执行完成后再继续执行。`join()`方法定义在`java.lang.Thread`类中,它使得多线程间的协作更加有序。 ...

    JAVA线程高级-线程按序交替执行

    - `join()`方法让调用的线程等待目标线程执行完毕后再继续执行。 2. **`synchronized`关键字**: - `synchronized`用于实现线程同步,防止数据的不一致性。它可以修饰方法或代码块,当一个线程进入同步块/方法后...

    Java线程中yield与join方法的区别Java开发J

    它可以确保当前线程在调用`join`的线程执行完其所有任务后才继续执行,从而实现线程间的同步。`join`方法有一个可选的时间参数,可以设置等待的最长时间,超过这个时间还没结束,当前线程将不再等待并继续执行。这在...

    Java Thread多线程全面解析

    2. 就绪状态(Runnable):调用Thread对象的start()方法后,线程进入就绪状态,表示线程准备运行,但不保证立即执行,需要等待CPU调度。 3. 运行状态(Running):CPU调度到就绪状态的线程后,线程开始执行run()...

    java+多线程+同步详解源代码学习

    - 继承Thread类:创建一个新的类,继承自Thread类,重写run()方法,然后创建该类的对象并调用start()方法启动线程。 - 实现Runnable接口:创建一个实现Runnable接口的类,重写run()方法,然后将该对象作为参数传递...

    C++ 等待线程结束

    `join()`函数会阻塞调用线程(这里是主线程)直到被join的线程(`worker`线程)执行完毕。这意味着主线程会暂停执行,直到`workerFunction`函数执行完毕。 除了`join()`,C++标准库还提供了`detach()`函数。`detach...

    Java简单实现“主线程等待所有子线程完成再继续”

    首先,Java提供了多种方式来管理线程间的同步,如`Thread.join()`方法、`CountDownLatch`、`CyclicBarrier`和`Semaphore`等。在这里,我们将重点讨论使用`Thread.join()`方法和`ExecutorService`结合的方式。 `...

    java线程线程安全同步线程

    线程的主体行为定义在`run()`方法中,当`start()`方法被调用时,线程进入可运行态,系统会根据线程调度策略来决定何时执行线程。线程的状态包括新线程态、可运行态、非运行态和死亡态。线程可以通过`sleep()`、`wait...

    Java线程学习和总结

    Java提供了一些方法来控制线程状态,如`sleep()`使线程暂停执行一段时间,`join()`等待指定线程结束,`yield()`让当前线程暂停,让其他相同优先级的线程有机会执行,`interrupt()`用于中断线程。 同步是Java线程...

    让线程按顺序执行8种方法.doc

    join()是Thread的方法,作用是调用线程需等待该join()线程执行完成后,才能继续使用下运行。应用场景:当一个线程必须等待另一个线程执行完毕才能执行时可以使用join方法。 在上面的示例代码中,我们可以看到thread...

    JAVA 线程中启动线程

    - **定时等待(Timed Waiting)**:线程处于有限期等待状态,如调用了`sleep()`或`join()`方法。 - **终止(Terminated)**:`run()`方法执行完毕或抛出未捕获异常。 3. **线程控制** - **sleep()**:让当前线程...

    JAVA多线程学习内容

    线程可以通过sleep()方法进入阻塞状态,通过join()方法让主线程等待子线程完成,通过wait()和notify()或notifyAll()方法进行线程间的同步与通信。 Java提供了多种线程控制机制,如synchronized关键字用于实现互斥...

    Java多线程机制(讲述java里面与多线程有关的函数)

    线程联合(Join)是让一个线程等待另一个线程完成后再继续执行,通过调用`join()`方法实现。 9.11 守护线程: 守护线程(Daemon)是一种不阻止程序退出的线程,如垃圾收集器就是守护线程。当所有非守护线程结束时,...

    Java线程超时监控

    在这种情况下,`join`方法会让调用线程等待,直到目标线程结束或超时。如果超时,当前线程将恢复执行,并且可以通过调用`interrupt`来中断目标线程(但这并不意味着目标线程会立即停止,它可能需要在内部检查`...

    java线程同步及通信

    `Synch.java`的`main`方法中,通过`join()`方法确保`ob1`、`ob2`和`ob3`线程按照创建的顺序执行,这也是线程同步的一种体现。 2. **线程间通信**: 在多线程环境中,线程之间可能需要交换数据或协调工作。Java提供...

    java多线程Demo

    一个线程调用另一个线程的join()方法,会等待该线程执行完毕后再继续执行,可以用来控制线程的执行顺序。 8. Volatile关键字: Volatile关键字可以保证线程间变量的可见性,但不能保证原子性。在多线程环境下,...

    Java线程 学习

    - **join() 方法**:一个线程可以使用`join()`方法等待另一个线程结束。 - **volatile 关键字**:用于标记可能被多个线程访问的变量,确保线程间的可见性和有序性。 - **synchronized 关键字**:用于实现对共享资源...

Global site tag (gtag.js) - Google Analytics