package thread;
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;
/**
* JdkDemo : TestExecutorService.java
*
* @date 2014-8-5
* @author Meng
* @version
*
*/
public class TestExecutorService1 {
// 初始化线程池
static ExecutorService executorService = Executors.newFixedThreadPool(100);
/**
* @param args
* @throws InterruptedException
* @throws ExecutionException
*/
public static void main(String[] args) throws InterruptedException,
ExecutionException {
Future> future1, future2;
// 1. 提交任务 runnable , future 获取线程执行结果
future1 = executorService.submit(new ConsumerThread1());
// 2. 提交任务 callable , future 获取线程执行结果
future2 = executorService.submit(new ConsumerThread2());
// 3. 提交任务 FutureTask
FutureTask task3 = new FutureTask(new ConsumerThread3());
executorService.submit(task3);
System.out.println("------------task1 执行结果------------");
// 此处因为调用了 get 方法 , 主线程会等待子线程完成
System.out.println(String.format("result [%s]", future1.get()));
System.out.println("\n");
System.out.println("------------task2 执行结果------------");
System.out.println(String.format("result [%s]", future2.get()));
System.out.println("\n");
System.out.println("------------task3 执行结果------------");
System.out.println(String.format("result [%s]", task3.get()));
System.out.println("\n");
executorService.shutdown();
System.out.println("结束");
}
}
/**
* 实现 Runnable 接口 , future 模式 无法获取返回结果 JdkDemo :
* TestExecutorService.java
*
* @date 2014-8-5
* @author Meng
* @version
*
*/
class ConsumerThread1 implements Runnable {
public void run() {
System.out.println("task1 start");
for (int i = 0; i < 4; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
System.out.println(this.getClass().toString() + "-->" + i);
}
System.out.println("task1 end");
}
}
/**
* 实现 Callable 接口 , 可以抛出异常 , 可以存在返回值 JdkDemo :
* TestExecutorService.java
*
* @date 2014-8-5
* @author Meng
* @version
*
*/
class ConsumerThread2 implements Callable {
public String call() throws Exception {
System.out.println("task2 start");
for (int i = 0; i < 4; i++) {
Thread.sleep(1000);
System.out.println(this.getClass().toString() + "-->" + i);
}
System.out.println("task2 end");
return "done";
}
}
/**
* 实现 Callable 接口 , 可以抛出异常 , 可以存在返回值 JdkDemo :
* TestExecutorService.java
*
* @date 2014-8-5
* @author Meng
* @version
*
*/
class ConsumerThread3 implements Callable {
public String call() throws Exception {
System.out.println("task3 start");
for (int i = 0; i < 4; i++) {
Thread.sleep(1000);
System.out.println(this.getClass().toString() + "-->" + i);
}
System.out.println("task3 end");
return "done";
}
}