Java通过开启线程池实现多线程
计算1..100 和1…200 的和,使用线程池开启两个线程
调用Executors类的newFixedThreadPool方法参数是线程池容纳的线程数量 这里是2 返回的对象是 ExecutorService类型
用返回的对象 调用submit方法,传入的参数可以是 实现接口类 Runnable 或者是 Callable<数据类型>
泛型里约束的 数据类型,是Callable实现类的重写方法 call方法的 返回值,通过这个返回值可以将运算的结果 返回输出
传入的实现类对象,返回值是一个 Featrue类的对象该类的泛型约束的数据类型和 实现类的泛型约束的数据格式一致
用该类的对象调用get方法即可获得所需要的计算结果返回值。
package demo06; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; /* * 使用多线程技术,求和 * 两个线程,1个线程计算1..100和,另一个线程计算1..200的和 * 多线程的异步计算 */ public class ThreadPoolDemo { public static void main(String[] args) throws InterruptedException, ExecutionException { ExecutorService es=Executors.newFixedThreadPool(2); Future<Integer> f1=es.submit(new GetSumCallable(100)); Future<Integer> f2=es.submit(new GetSumCallable(200)); System.out.println(f1.get()); System.out.println(f2.get()); es.shutdown(); //销毁线程池,程序结束。不做这一步,程序将永久保持运行状态,资源得不到释放 } }
package demo06; import java.util.concurrent.Callable; public class GetSumCallable implements Callable<Integer> { private int a; public GetSumCallable(int a){ this.a=a; } public Integer call(){ int sum=0; for(int i=1;i<=a;i++){ sum+=i; } return sum; } }