- 实现Callable接口
package callable;
import java.util.concurrent.Callable;
public class CallableDemo01 implements Callable<String> {
@Override
public String call() throws Exception {
//模拟耗时任务
Thread.sleep(2000);
return Thread.currentThread().getName()+"--->我是callable测试";
}
}
- 测试主类
package callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class MainTest {
public static void main(String[] args) {
CallableDemo01 callableDemo01 = new CallableDemo01();
FutureTask<String> futureTask = new FutureTask<String>(callableDemo01);
new Thread(futureTask).start();
//获取结果
try {
//因为CallableDemo01的call方法sleep了2秒,所以这里会阻塞2秒
Long startTime = System.currentTimeMillis();
String result = futureTask.get();
System.out.println("阻塞了"+ (System.currentTimeMillis() - startTime)/1000 +"s, 执行结果="+result);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
- 运行结果
阻塞了2s, 执行结果=Thread-0--->我是callable测试
Process finished with exit code 0