package com.muti.threads;
import java.util.concurrent.*;
/**
* ExecutorService
* ExecutorService接口的实现有,ThreadPoolExecutor和ScheduledThreadPoolExcecutor。
* ----通常选择Exectors工厂类的静态方法来创建一个线程池:
* (1)newFixedThreadPool。将创建一个固定长度的线程池
* (2) newCachedThreadPool。将创建一个可缓存的线程池
* (3)newSingleThreadPool.是一个单线程的Executor ,如果这个线程异常结束,会创建另一个线程来替代
* (4)newScheduledThreadPool 创建了一个固定长度的线程池
* (5)当默认的创建线程池策略无法满足要求时 ,个性化定制:
* public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit
* ,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)
*
*/
public class MyExecutorDemo {
//执行的任务数量
private static final int MAX = 10;
public static void main(String args[]){
try {
fixedThreadPool(7);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
private static void fixedThreadPool (int coreSize)
throws InterruptedException,ExecutionException {
//创建线程池,通过Executors的静态方法newFixedThreadPool()创建线程池对象;
ExecutorService exec = Executors.newFixedThreadPool(coreSize);
for(int i = 0; i < MAX; i++){
//提交任务,创建多线程的方法之一,三种选择1 ;将定义的多线程任务提交给线程池,等待线程池调用
Future<Integer> task = exec.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
System.out.println("执行线程名:" + Thread.currentThread().getName());
return fibc(20);
}
});
//获取执行结果,使用task.get()开始执行
System.out.println("第"+i+"次计算结果为: "+task.get());
}
}
//定义一个斐波那契数列
private static int fibc(int num){
if (num == 0){
return 0;
}
if (num == 1){
return 1;
}
return fibc(num-1)+fibc(num-2);
}
}
import java.util.concurrent.*;
/**
* ExecutorService
* ExecutorService接口的实现有,ThreadPoolExecutor和ScheduledThreadPoolExcecutor。
* ----通常选择Exectors工厂类的静态方法来创建一个线程池:
* (1)newFixedThreadPool。将创建一个固定长度的线程池
* (2) newCachedThreadPool。将创建一个可缓存的线程池
* (3)newSingleThreadPool.是一个单线程的Executor ,如果这个线程异常结束,会创建另一个线程来替代
* (4)newScheduledThreadPool 创建了一个固定长度的线程池
* (5)当默认的创建线程池策略无法满足要求时 ,个性化定制:
* public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit
* ,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)
*
*/
public class MyExecutorDemo {
//执行的任务数量
private static final int MAX = 10;
public static void main(String args[]){
try {
fixedThreadPool(7);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
private static void fixedThreadPool (int coreSize)
throws InterruptedException,ExecutionException {
//创建线程池,通过Executors的静态方法newFixedThreadPool()创建线程池对象;
ExecutorService exec = Executors.newFixedThreadPool(coreSize);
for(int i = 0; i < MAX; i++){
//提交任务,创建多线程的方法之一,三种选择1 ;将定义的多线程任务提交给线程池,等待线程池调用
Future<Integer> task = exec.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
System.out.println("执行线程名:" + Thread.currentThread().getName());
return fibc(20);
}
});
//获取执行结果,使用task.get()开始执行
System.out.println("第"+i+"次计算结果为: "+task.get());
}
}
//定义一个斐波那契数列
private static int fibc(int num){
if (num == 0){
return 0;
}
if (num == 1){
return 1;
}
return fibc(num-1)+fibc(num-2);
}
}