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方法的线程,其他线程等待该线程完全执行完后才会进来。