有人曾经说过,初级程序员认为并发很难,中级程序员认为并发很简单,高级程序员认为并发很难.这说的很对。但是从好的方面来看,Java8为我们带来了转机,通过lambda表达式和改进的API可以使得编写并发代码更容易。让我们来具体的看看Java8的改进吧: Java8对JDK 1.0 API的改进:Thread早在JDK 1.0版本中就已经存在。在java8中被注解为功能性接口的Runnable也是.从现在起,几乎不需要动大脑我们就可以提交Runnables给一个线程。让我们假设我们有一个很耗时的操作: public static int longOperation() { System.out.println("Running on thread #" + Thread.currentThread().getId()); // [...] return 42; } 我们可以用多种方法把这个操作传递给线程,例如: Thread[] threads = { //Pass a lambda to a thread new Thread(() -> { longOperation(); }), // Pass a method reference to a thread new Thread(ThreadGoodies::longOperation) }; // Start all threads Arrays.stream(threads).forEach( Thread::start); // Join all threads Arrays.stream(threads).forEach( t -> { try{ t.join(); } catch (InterruptedException ignore) { } }); 就像我们在之前的博文里提到的一样,lambda表达式没有一个简洁的方式来处理被检查异常实在是一大憾事。在java.util.function包中新增的功能性接口都不会抛出被检查异常,把这项工作留给了调用端。我们已经因此而发布了jOOλ(also jOOL,jOO-Lambda)包,该包包装了JDK中的每一个功能性接口,具有相同功能而且也允许抛出被检异常。这在使用老的JDK API时特别有用,例如JDBC,或者上面提到的Thread API。使用jOOλ,我们可以这么写: // Join all threads Arrays.stream(threads).forEach(Unchecked.consumer( t -> t.join() ) ); Java8中改进的Java5 API:Java的多线程功能一直没有什么起色,直到Java5的ExecutorService的发布。管理多线程是一个负担,人们需要额外的库或者一个J2EE/JEE容器来管理线程池。这些用Java5来处理已经容易了很多。我们现在可以提交一个Runnable对象或者一个Callable对象ExecutorService,它管理自己的线程池。下面是一个我们如何在Java8中利用这些Java5的并发API的例子: ExecutorService service = Executors.newFixedThreadPool(5); Future[] answers = { service.submit(() -> longOperation()), service.submit(ThreadGoodies::longOperation) }; Arrays.stream(answers).forEach( Unchecked.consumer( f -> System.out.println(f.get()) )); 注意看,我们是如何再次使用jOOλ中的UncheckedConsumer来包装在运行期调用get()方法抛出的被检异常。 Java8中的并行和ForkJoinPool:现在,Java8的Streams API在并发和并行方面有了很大改进。 在Java8中你可以写出如下的代码: Arrays.stream(new int[]{ 1, 2, 3, 4, 5, 6 }) .parallel() .max() .ifPresent(System.out::println); 虽然在这个特殊的例子中不是很必要,但还是挺有意思的,你仅仅调用了parallel()就运行IntStream.max()来启用ForkJoinPool,而你不必担心包含的ForkJoinTasks。这是非常有用的,因为不是每个人都能够接受JDK7中引进的复杂的JorkJoin API。 |
行业聚焦 面试交流 职位推荐 开发视频 技术交流 腾讯微博 新浪微博
友情链接:课课家教育 阿里云 鲜果 W3Cfuns前端网 中国企业家 环球企业家 投资界 传媒梦工场 MSN中文网 Android开发者社区 cnbeta 投资中国网 又拍云存储 美通说传播 IT茶馆 网商在线 商业评论网 TechOrange IT时代周刊 3W创新传媒 开源中国社区 二维工坊 Iconfans 推酷 智能电视网 FreeBuf黑客与极客 财经网 DoNews 凤凰财经 新财富 eoe移动开发者社区 i黑马 网易科技 新浪科技 搜狐IT 创业家 创业邦 腾讯财经 福布斯中文网 天下网商 TechWeb 雷锋网 新浪创业 和讯科技 品途O2O 极客公园 艾瑞网 抽屉新热榜 卖家网 人民网通信频道 拉勾网 创新派 简单云主机
手机版|黑名单|守望者 成才网 在线教育 linux 高级程序设计 C/C++ 大数据
( 蜀ICP备14029946号 )
成都守望者科技有限公司 © 2013-2016 All Rights Reserved