美文网首页Java知识123
Java 中线程(三)

Java 中线程(三)

作者: 奔跑的笨鸟 | 来源:发表于2017-06-22 23:08 被阅读3次

如果要用能返回值得线程,得用到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继续执行,结果是异步返回的。

相关文章

  • Java线程模型

    Java线程模型 本文将从线程类型、线程通信、线程调度三个方面分析Java中的线程模型。 什么是线程? 线程就是进...

  • Java 多线程之线程的创建及其使用

    一、创建线程以及启动线程 二、停止线程 三、线程类中函数详解 一、创建线程以及启动线程 创建线程:Java中创建线...

  • 线程

    java 中创建线程有哪几种方式? Java中创建线程主要有三种方式: 一、继承Thread类创建线程类 (1)定...

  • 笔记-Android中的线程使用

    目录 Java中的线程 Java中如何创建线程 Java中的线程同步问题(synchronized关键字,lock...

  • Android中的线程使用与Java有何不同?

    目录 Java中的线程 Java中如何创建线程 Java中的线程同步问题(synchronized关键字,lock...

  • Thinking in java 之并发其三:线程的状态

    Thinking in java 之并发其三:线程的状态 一、线程的四种状态 在 java 中,一个线程可以处于下...

  • 带你搞懂Java多线程(五)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四) ...

  • 线程

    java线程多线程 如何新建线程 总结:java天生是一个多线层的语言,新建线程有三中方式1.new UserTh...

  • 带你搞懂Java多线程(六)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四)带...

  • 【转】java中创建线程的三种方法以及区别

    原文链接: java中创建线程的三种方法以及区别 Java使用Thread类代表线程,所有的线程对象都必须是Thr...

网友评论

    本文标题:Java 中线程(三)

    本文链接:https://www.haomeiwen.com/subject/tudqcxtx.html