返回线程中的信息

在实际应用中,我们在主线程启动一个线程后,常希望该线程执行完之后会返回一些信息给主线程。

比如,点击了一个按钮(主线程)进行上传文件(子线程),我们希望在上传完之后会给我们提示上传完毕.

如何获得线程中返回的信息呢?

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一声,我搞定啦...


 

转载于:https://my.oschina.net/daxia/blog/89225

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值