Java多线程中关于join方法的使用实例解析
先上代码
新建一个Thread,代码如下:
packagecom.thread.test; publicclassMyThreadextendsThread{ privateStringname; publicMyThread(Stringname){ this.name=name; } @Override publicvoidrun(){ for(inti=0;i<100;i++){ System.out.println(name+"["+i+"]"); } super.run(); } }
之后新建测试类,代码如下:
packagecom.thread.test; /* *0-50执行的是主线程,50-100执行的是A线程,并且将A线程完全执行完后才继续执行主线程 */ publicclassThreadDemo{ publicstaticvoidmain(String[]args){ MyThreadt=newMyThread("A"); t.start(); for(inti=0;i<100;i++){ if(i>50){ try{ t.join(); }catch(InterruptedExceptione){ e.printStackTrace(); } } System.out.println("主线程"+"["+i+"]"); } } }
下面是JavaPlatformSE8API中对Thread中Join方法的解释:
publicfinalvoidjoin(longmillis) throwsInterruptedExceptionWaitsatmostmillismillisecondsforthisthreadtodie.Atimeoutof0meanstowaitforever. Thisimplementationusesaloopofthis.waitcallsconditionedonthis.isAlive.Asathreadterminatesthethis.notifyAllmethodisinvoked.Itisrecommendedthatapplicationsnotusewait,notify,ornotifyAllonThreadinstances. Parameters: millis-thetimetowaitinmilliseconds Throws: IllegalArgumentException-ifthevalueofmillisisnegative InterruptedException-ifanythreadhasinterruptedthecurrentthread.Theinterruptedstatusofthecurrentthreadisclearedwhenthisexceptionisthrown.
先上代码
新建一个Thread,代码如下:
packagecom.thread.test; publicclassMyThreadextendsThread{ privateStringname; publicMyThread(Stringname){ this.name=name; } @Override publicvoidrun(){ for(inti=0;i<100;i++){ System.out.println(name+"["+i+"]"); } super.run(); } }
之后新建测试类,代码如下:
packagecom.thread.test; /* *0-50执行的是主线程,50-100执行的是A线程,并且将A线程完全执行完后才继续执行主线程 */ publicclassThreadDemo{ publicstaticvoidmain(String[]args){ MyThreadt=newMyThread("A"); t.start(); for(inti=0;i<100;i++){ if(i>50){ try{ t.join(); }catch(InterruptedExceptione){ e.printStackTrace(); } } System.out.println("主线程"+"["+i+"]"); } } }
下面是JavaPlatformSE8API中对Thread中Join方法的解释:
publicfinalvoidjoin(longmillis) throwsInterruptedExceptionWaitsatmostmillismillisecondsforthisthreadtodie.Atimeoutof0meanstowaitforever. Thisimplementationusesaloopofthis.waitcallsconditionedonthis.isAlive.Asathreadterminatesthethis.notifyAllmethodisinvoked.Itisrecommendedthatapplicationsnotusewait,notify,ornotifyAllonThreadinstances. Parameters: millis-thetimetowaitinmilliseconds Throws: IllegalArgumentException-ifthevalueofmillisisnegative InterruptedException-ifanythreadhasinterruptedthecurrentthread.Theinterruptedstatusofthecurrentthreadisclearedwhenthisexceptionisthrown.
我自己的理解就是会强行进入使用join方法的线程,其他线程等待该线程完全执行完后才会进来。