今天有一个需求是:在一个方法中开启了一个子线程来执行操作,返回值依赖于子线程的执行结果,这样如果要返回正确的值,就需要开启子线程后
主线程等待子线程,然后子线程执行结束后,主线程再继续执行。
主线程等待子线程需要用到:CountDownLatch
直接上代码:
public boolean isUpdateResource() {
CountDownLatch cdl=new CountDownLatch(1);//这里的数字,开启几个线程就写几
new MyThread(cdl).start();
try {
cdl.await();//主线程等待子线程执行
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(result!="0"){
isUpdateResource=true;
resurseUrl=result;
}
return isUpdateResource;
}
创建一个Thread类
public class MyThread extends Thread{
private CountDownLatch cdl;
public MyThread(CountDownLatch cdl){
this.cdl=cdl;
}
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
result = connectServer(serverUrl);
cdl.countDown();
}
}
这样就实现了,主线程等待子线程结束后再执行。