Java多线程的join()

假设在main线程里又起了一个thread1线程,在调用了thread1.start()之后:

如果在main线程里调用了thread1.join(),那么main线程将会block,直到thread1执行完了之后,main线程才会继续执行。

如果在main线程里没有调用thread1.join(),那么main线程和thread1线程将会并行执行。

测试代码如下:

 1 public class JoinThread extends Thread{
 2     public JoinThread(String name){
 3           super(name);
 4     }
 5
 6     public void run(){
 7           for(int i=0; i<10; i++){
 8                 for(long k=0; k<100000000; k++){
 9                     System.out.println(this.getName() + ": " + i);
10                 }
11           }
12     }
13
14     public static void main(String[] args){
15           Thread thread1 = new JoinThread("AA AA");
16           thread1.start();
17           try{
18                 thread1.join();                 //Join在这里~
19           } catch(InterruptedException e) {
20                 e.printStackTrace();
21           }
22           for(int i=0; i<10; i++){
23               for(long k=0; k<100000000; k++){
24                   System.out.println(Thread.currentThread().getName() + ": " + i);
25               }
26           }
27           System.out.println("over");
28     }
29 }

以上代码的执行结果如下:

AA AA: 0
AA AA: 0
AA AA: 0
AA AA: 0
AA AA: 0
AA AA: 0

这是因为main线程要等待thread1执行完了才能执行,因此thread1打印了一堆AA AA: 0

而如果将第17到21行注释掉之后再运行,结果如下:

main: 0

AA AA: 0

AA AA: 0

AA AA: 0
main: 0
main: 0

这是因为main线程和thread1线程在同时运行。

时间: 2024-10-11 13:11:37

Java多线程的join()的相关文章

java多线程中join用法

thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B. package com.wzs; /** * Java多线程中join用法 * * @author Administrator * */ public class JoinTest { public static void main(String[] args) { BThread bThread = new B

Java多线程中join、yield、sleep方法详解

在Java多线程编程中,Thread类是其中一个核心和关键的角色.因此,对该类中一些基础常用方法的理解和熟练使用是开发多线程代码的基础.本篇主要总结一下Thread中常用的一些静态方法的含义及代码中的使用. sleep方法 源码如下: /** * Causes the currently executing thread to sleep (temporarily cease * execution) for the specified number of milliseconds, subje

Java 多线程 Fork/Join

Fork/Join Fork/Join将大任务切分成小任务来分治运算,fork分join合. 一般直接使用ForkJoinTask的子类RecursiveTask. RecursiveTask的用法 1.新建类A来继承RecursiveTask,实现compute()方法,这个方法就是需要分治的代码.其中,调用fork()方法来表示需要分解计算的内容,调用join()方法来获取结果 2.新建ForkJoinPool,使用ForkJoinPool.submit(A的实例),来提交分治代码,并使用F

Java多线程学习:Join()

方法join的作用是使所属的线程对象x正常执行run()方法中的任务,而使当前线程Z进行无限期的阻塞,等待线程X销毁后再继续执行线程Z后面的代码.一般用于子线程先执行完毕再继续执行主线程的情况. 但是join方法后面的代码会不会提前执行呢?看下面的代码 1 public class ThreadA extends Thread { 2 3 private ThreadB threadB; 4 5 public ThreadA(ThreadB threadB) { 6 super(); 7 thi

JAVA多线程---wait() &amp; join()

题外话: interrupt()方法  并不能中断一个正常运行的线程!!! class myThread extends Thread{ @Override public void run(){ for (int i = 0; i < 1000; i++) { System.out.println(i); } } } public class waitTest { public static void main(String[] args) throws Exception{ Thread t

Java多线程中join方法详解

join()方法用于让当前执行线程等待join线程执行结束.其实现原理是不停的检查join线程是否存活,如果join线程存活则让当前线程永远等待. join()方法部分实现细节 while(isAlive()) { wait(0) } 其中wait(0)表示永远等待下去. join线程中止后,线程的this.notifyAll()方法会被调用,调用notifyAll()是在JVM里调用的所有在JDK中看不到,大家可以看JVM源码 示例程序: public calss ThreadTest{ pu

Java多线程 2.线程安全

1.Java多线程-认识Java线程 2.Java多线程-线程安全 3.Java多线程-线程协作 4.Java多线程-线程池 5.Java多线程-栅栏 6.Java多线程-Fork/Join 原文地址:https://www.cnblogs.com/gongcong/p/9261204.html

Java多线程 5.栅栏

1.Java多线程-认识Java线程 2.Java多线程-线程安全 3.Java多线程-线程协作 4.Java多线程-线程池 5.Java多线程-栅栏 6.Java多线程-Fork/Join Java多线程 5.栅栏 原文地址:https://www.cnblogs.com/gongcong/p/9296944.html

thread.join函数,java多线程中的join函数解析

join函数的作用,是让当前线程等待,直到调用join()的 线程结束或者等到一段时间,我们来看以下代码 1 package mian; 2 3 4 public class simpleplela { 5 static void threadMessage(String message) { 6 String threadName = 7 Thread.currentThread().getName(); 8 9 System.out.println(threadName+" "+m