Java 中线程(三)

如果要用能返回值得线程,得用到Callable 和FutureTask,但是返回值是阻塞式的,因此自己实现了个异步返回值的线程。
功能简单了点,只是个思路。

package thread;

import java.text.SimpleDateFormat;
import thread.FutureJob.CallBack;

interface ReturnBackRunnable<T>{
    T run();
}


class FutureJob<T> implements Runnable{

    interface CallBack<T>{
        void callBack(T t);
    }
    private CallBack<T> mCallBack;
    private ReturnBackRunnable<T> returnBackRunnable;
    
    
    public FutureJob(ReturnBackRunnable<T> returnBackRunnable) {
        this.returnBackRunnable = returnBackRunnable;
    }


    public FutureJob(CallBack<T> mCallBack, ReturnBackRunnable<T> returnBackRunnable) {
        this.mCallBack = mCallBack;
        this.returnBackRunnable = returnBackRunnable;
    }


    public void setCallBack(CallBack<T> mCallBack) {
        this.mCallBack = mCallBack;
    }
    

    @Override
    public void run() {
        if(returnBackRunnable!=null){
        T value=    returnBackRunnable.run();
        if(mCallBack!=null){
            mCallBack.callBack(value);
        }
        }
        
    }

    
    
}

public class TCallable {

    public static void main(String[] args) {
        FutureJob<String> futureJob = new FutureJob<String>(new ReturnBackRunnable<String>() {

            @Override
            public String run() {
                try {
                    Thread.sleep(1000*10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return "OK";
            }
        });
        futureJob.setCallBack(new CallBack<String>() {

            @Override
            public void callBack(String t) {
                System.out.println("the back value is "+t);
            }
        });
        
        System.out.println(formatDate(System.currentTimeMillis()));
        new Thread(futureJob).start();
        System.out.println(formatDate(System.currentTimeMillis()));
    }
    


private static String formatDate(long date){
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    return simpleDateFormat.format(date);
}
}

执行结果:

2017/06/22 23:01:53
2017/06/22 23:01:53
the back value is OK

从结果看,执行完start后,返回main继续执行,结果是异步返回的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容