JAVA 多线程 Callable 与 FutureTask:有返回值的多线程

java多线程中,如果需要有返回值,就需要实现Callable接口。

看例子:

先建立一个Dowork这个类,就是平时某个业务的实现

package com.ming.thread.one;

import java.util.concurrent.Callable;

/**
 * 
 * 定义一个具体做事情work
 * 线程运行完成后返回一个Stirng
 * @author ming
 *
 */
public class Dowork implements Callable<String> {

    private int i=10;
    
    @Override
    public String call() throws Exception {
        while(i>0){
            System.out.println("i am work......"+i);
            i--;
            Thread.sleep(1000);
        }
        return "我做完了这次工作哦...";
    }

    
}

然后在我的测试类中,你可以看到要建立一个FutureTask这个任务调度,最后通过它可以获取线程执行的返回值.

package com.ming.thread.one;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * 测试dowork的线程 
 * @author ming
 *
 */
public class TestDowork {

    public static void main(String[] args) throws InterruptedException, ExecutionException {
        Dowork dowork=new Dowork();
        FutureTask<String> futureTask=new FutureTask<>(dowork);//新建一个检查dowork的线程任务
        new Thread(futureTask).start();
        while(!futureTask.isDone()){
            System.out.println("检查工作释放做完...");
            Thread.sleep(100);
        }
        String s=futureTask.get();
        System.out.println("获取追后返回值哦..."+s);
    }
}

ok,ok,ok。。。

原文地址:https://www.cnblogs.com/huzi007/p/7053318.html