在实际应用中,我们在主线程启动一个线程后,常希望该线程执行完之后会返回一些信息给主线程。
比如,点击了一个按钮(主线程)进行上传文件(子线程),我们希望在上传完之后会给我们提示上传完毕.
如何获得线程中返回的信息呢?
1、轮询:
public class Upload extends Thread{
private boolean done = false;
public void run(){
begin:
do uploadthings....
end:
done = true;
}
public boolean getFinishFlag{
return done;
}
}
//主线程
main(){
botton.onClick(){//这里意思到了就好呵..
Upload load = new Upload();
load.start();
while(true){
if(load.getFinishFlag()){
I have uploaded the file...
break;
}
}
}
}
这种方法是通过主线程主动去轮询子线程来完成通信,就像中断的程序轮询方式一样,由cup来轮询I\O设备...
这种方法不好,而且浪费了许多没必要的时间。但是它能工作...
2、回调
public class Upload extends Thread{
private CallBack call;
public Upload(CallBack call){
this.call = call;
}
public void run(){
begin:
do uploadthings....
end:
call.done();
}
}
//主线程
public MainClass{
interface CallBack{
void done();
}
main(){
botton.onClick(){
Upload load = new Upload(new CallBack(){
public void done(){
I have uploaded the file...
}
});
load.start();
}
}
}
这种方式是比较合理的方式,由子线程主动通知主线程:我完成上传了
就像中断方式中的DMA方式,不打扰cpu,干完之后告诉cpu一声,我搞定啦...