import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* @Description
* @date 2019年7月24日 上午9:58:17
*/
public class FutureTaskTest02 {
public static void main(String[] args) throws Exception {
ExecutorService executorService= Executors.newCachedThreadPool();
System.out.println(System.currentTimeMillis());
Future<String> thread1 = executorService.submit(new Callable<String>(){
public String call() throws Exception {
Thread.sleep(2000);
return "1";
}
});
Future<String> thread2 = executorService.submit(new Callable<String>(){
public String call() throws Exception {
Thread.sleep(5000);
return "2";
}
});
String S1=thread1.get();
String S2=thread2.get();
executorService.shutdown();
System.out.println("S1:"+S1+",S2:"+S2);
System.out.println(System.currentTimeMillis());
}
}
第二個
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
/**
* @Description
* @date 2019年7月23日 下午5:55:46
*/
public class FutureTaskTest {
public static void main(String[] args) throws Exception {
long start = System.currentTimeMillis();
ExecutorService executor = Executors.newCachedThreadPool();
// ThreadFactory threadFactory = new ThreadFactoryBuilder().build();
// ExecutorService executor = new ThreadPoolExecutor(10, 10, 60L, TimeUnit.SECONDS,
// new ArrayBlockingQueue<Runnable>(10), threadFactory, new ThreadPoolExecutor.AbortPolicy());
try {
CustomCallable callable = new CustomCallable();
FutureTask<Integer> callableTask = new FutureTask<Integer>(callable);
executor.submit(callableTask);
System.out.println("callableTask任務計算結果=" + callableTask.get());
CustomRunnable runnable = new CustomRunnable();
FutureTask<Void> runnableTask = new FutureTask<>(runnable, null);
executor.submit(runnableTask);
long end = System.currentTimeMillis();
System.out.println("耗時:" + (end - start));
} finally {
executor.shutdown();
}
}
}
class CustomCallable implements Callable<Integer> {
@Override
public Integer call() throws Exception {
System.out.println("call start");
int sum = 0;
for (int i = 0; i < 10; i++) {
sum += i;
}
System.out.println("sum:" + sum);
System.out.println("call:"+System.currentTimeMillis());
return sum;
}
}
class CustomRunnable implements Runnable {
@Override
public void run() {
System.out.println("run start");
int sum = 0;
for (int i = 0; i < 10; i++) {
sum += i;
}
System.out.println("RunnableTask任務計算結果=" + sum);
System.out.println("run:"+System.currentTimeMillis());
}
}