知识点:获取线程池、提交任务、获取返回值
获取线程池的几种方式:
newFixedThreadPool(int nThreads) 获取固定数量的线程池。参数:指定线程池中线程的数量。(使用这种)
newCachedThreadPool() 获得动态数量的线程池,如不够则创建新的,⽆上限。
newSingleThreadExecutor() 创建单个线程的线程池,只有⼀个线程。
newScheduledThreadPool() 创建固定⼤⼩的线程池,可以延迟或定时执⾏任务。
Callable:jdk1.5之后可以使用Callable来实现线程,这个类的call方法具有泛型返回值、可以声明异常。
Runnable接⼝和Callable接⼝的区别:
Callable接⼝中call⽅法有返回值,Runnable接⼝中run⽅法没有返回值。
Callable接⼝中call⽅法有声明异常,Runnable接⼝中run⽅法没有异常。
Future接⼝表示将要执⾏完任务的结果。 get()以阻塞形式等待Future中的异步处理结果(call()的返回值)。
案例1:使⽤两个线程,并发计算1~50、51~100的和,再进⾏汇总统计。
public class TestFuture2 { public static void main(String[] args) throws Exception{ //1创建线程池 ExecutorService es= Executors.newFixedThreadPool(2); //2提交任务 Future<Integer> future1=es.submit(new Callable<Integer>() { @Override public Integer call() throws Exception { int sum=0; for(int i=1;i<=50;i++) { sum+=i; } System.out.println("1-50计算完毕"); return sum; } }); Future<Integer> future2=es.submit(new Callable<Integer>() { @Override public Integer call() throws Exception { int sum=0; for(int i=51;i<=100;i++) { sum+=i; } System.out.println("51-100计算完毕"); return sum; } }); //3获取结果 int sum=future1.get()+future2.get(); System.out.println("结果是:"+sum); //4关闭线程池 es.shutdown(); } }
标签:int,51,50,Callable,线程,返回值,call From: https://www.cnblogs.com/huangruiwu/p/16610223.html