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。。。