demo:
/**
* 2019年6月28日下午2:33:37
*/
package testcallable;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
/**
* @author XWF
*
*/
public class TestCallable {
/**
* @param args
*/
public static void main(String[] args) {
//Callable,ExecutorService,Future
ExecutorService executor = Executors.newCachedThreadPool();
Future future = executor.submit(new Callable() {
@Override
public String call() throws Exception {
Thread.sleep(1000);
return "abc";
}
});
System.out.println("1...");
try {
System.out.println(future.get());//阻塞等待返回
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
//Callable,FutureTask,ExecutorService
FutureTask futureTask = new FutureTask(new Callable() {
@Override
public Integer call() throws Exception {
return 12345;
}
});
executor.submit(futureTask);
System.out.println("2...");
try {
System.out.println(futureTask.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
//Callable,FutureTask,Thread
FutureTask futureTask2 = new FutureTask(new Callable() {
@Override
public Integer call() throws Exception {
return 6789;
}
});
new Thread(futureTask2).start();
System.out.println("3...");
try {
System.out.println(futureTask2.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
结果:
参考:
https://www.cnblogs.com/dolphin0520/p/3949310.html