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线程在同时运行。