package mr_immortalz.com.multithread;
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.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* Created by Mr_immortalZ on 2016/5/10.
* email : mr_immortalz@qq.com
*/
public class ExecutorDemo {
private static final int MAX = 10;
public static void main(String[] args) {
/*try {
System.out.println("newFixedThreadPool启动");
fixedThreadPool(3);
System.out.println("newCachedThreadPool启动");
newCacheThreadPool();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}*/
scheduledThreadPool();
}
private static void fixedThreadPool(int size) throws ExecutionException, InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(size);
for (int i = 0; i < MAX; i++) {
Future<Integer> task = executorService.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
System.out.println("执行线程 : " + Thread.currentThread().getName());
return fibc(40);
}
});
System.out.println("第 " + i + " 次计算结果 :" + task.get() + " currenttime " + System.currentTimeMillis());
}
}
private static void newCacheThreadPool() {
ExecutorService executorService = Executors.newCachedThreadPool();//此时核心线程数为0
for (int i = 0; i < MAX; i++) {
executorService.submit(new Runnable() {
@Override
public void run() {
System.out.println("执行线程 : " + Thread.currentThread().getName() + " 结果: " + fibc(20));
}
});
}
}
private static void scheduledThreadPool() {
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3);
scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("Thread: " + Thread.currentThread().getName()
+ " , 定时计算1 : " );
System.out.println("结果 : " + fibc(30));
}
}, 10, 2, TimeUnit.SECONDS);
scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("Thread: " + Thread.currentThread().getName() + " , 定时计算2 : ");
System.out.println("结果 : " + fibc(40));
}
}, 5, 2, TimeUnit.SECONDS);
}
private static int fibc(int num) {
if (num == 0) {
return 0;
}
if (num == 1) {
return 1;
}
return fibc(num - 1) + fibc(num - 2);
}
}