A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tuan2016 中级黑马   /  2016-5-15 00:11  /  1100 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 tuan2016 于 2016-5-15 00:17 编辑

4.6 并行(parallel)数组
Java 8增加了大量的新方法来对数组进行并行处理。可以说,最重要的是parallelSort()方法,因为它可以在多核机器上极大提高数组排序的速度。下面的例子展示了新方法(parallelXxx)的使用。
  1. package com.javacodegeeks.java8.parallel.arrays;

  2. import java.util.Arrays;
  3. import java.util.concurrent.ThreadLocalRandom;

  4. public class ParallelArrays {
  5.     public static void main( String[] args ) {
  6.         long[] arrayOfLong = new long [ 20000 ];        
  7.         
  8.         Arrays.parallelSetAll( arrayOfLong,
  9.             index -> ThreadLocalRandom.current().nextInt( 1000000 ) );
  10.         Arrays.stream( arrayOfLong ).limit( 10 ).forEach(
  11.             i -> System.out.print( i + " " ) );
  12.         System.out.println();
  13.         
  14.         Arrays.parallelSort( arrayOfLong );     
  15.         Arrays.stream( arrayOfLong ).limit( 10 ).forEach(
  16.             i -> System.out.print( i + " " ) );
  17.         System.out.println();
  18.     }
  19. }
复制代码

上面的代码片段使用了parallelSetAll()方法来对一个有20000个元素的数组进行随机赋值。然后,调用parallelSort方法。这个程序首先打印出前10个元素的值,之后对整个数组排序。这个程序在控制台上的输出如下(请注意数组元素是随机生产的):
  1. Unsorted: 591217 891976 443951 424479 766825 351964 242997 642839 119108 552378
  2. Sorted: 39 220 263 268 325 607 655 678 723 793
复制代码


4.7 并发(Concurrency)
在新增Stream机制与lambda的基础之上,在java.util.concurrent.ConcurrentHashMap中加入了一些新方法来支持聚集操作。同时也在java.util.concurrent.ForkJoinPool类中加入了一些新方法来支持共有资源池(common pool)(请查看我们关于Java 并发的免费课程)。
新增的java.util.concurrent.locks.StampedLock类提供一直基于容量的锁,这种锁有三个模型来控制读写操作(它被认为是不太有名的java.util.concurrent.locks.ReadWriteLock类的替代者)。
在java.util.concurrent.atomic包中还增加了下面这些类:
  • DoubleAccumulator
  • DoubleAdder
  • LongAccumulator
  • LongAdder

5. 新的Java工具
Java 8也带来了一些新的命令行工具。在这节里我们将会介绍它们中最有趣的部分。

5.1 Nashorn引擎: jjs
jjs是个基于Nashorn引擎的命令行工具。它接受一些JavaScript源代码为参数,并且执行这些源代码。例如,我们创建一个具有如下内容的func.js文件:
  1. function f() {
  2.      return 1;
  3. };

  4. print( f() + 1 );
复制代码

我们可以把这个文件作为参数传递给jjs使得这个文件可以在命令行中执行:
  1. jjs func.js
复制代码

下面是程序在控制台上的输出:
2
更多详情请参考官方文档

5.2 类依赖分析器jdeps
jdeps是一个很有用的命令行工具。它可以显示Java类的包级别或类级别的依赖。它接受一个.class文件,一个目录,或者一个jar文件作为输入。jdeps默认把结果输出到系统输出(控制台)上。
下面我们查看现阶段较流行的Spring框架类库的依赖报告,为了简化这个例子,我们只分析一个jar文件:org.springframework.core-3.0.5.RELEASE.jar
jdeps org.springframework.core-3.0.5.RELEASE.jar
这个命令输出的内容很多,所以这里我们只选取一小部分。依赖信息按照包名进行分组。如果依赖不在classpath中,那么就会显示not found。
  1. org.springframework.core-3.0.5.RELEASE.jar -> C:\Program Files\Java\jdk1.8.0\jre\lib\rt.jar
  2.    org.springframework.core (org.springframework.core-3.0.5.RELEASE.jar)
  3.       -> java.io                                            
  4.       -> java.lang                                          
  5.       -> java.lang.annotation                              
  6.       -> java.lang.ref                                      
  7.       -> java.lang.reflect                                 
  8.       -> java.util                                          
  9.       -> java.util.concurrent                              
  10.       -> org.apache.commons.logging                         not found
  11.       -> org.springframework.asm                            not found
  12.       -> org.springframework.asm.commons                    not found
  13.    org.springframework.core.annotation (org.springframework.core-3.0.5.RELEASE.jar)
  14.       -> java.lang                                          
  15.       -> java.lang.annotation                              
  16.       -> java.lang.reflect                                 
  17.       -> java.util
复制代码

更多详情请参考官方文档
6. Java虚拟机(JVM)的新特性
PermGen空间被移除了,取而代之的是MetaspaceJEP 122)。JVM选项-XX:PermSize与-XX:MaxPermSize分别被-XX:MetaSpaceSize与-XX:MaxMetaspaceSize所代替。

7. 总结
更多展望:Java 8通过发布一些可以增加程序员生产力的特性来推进这个伟大的平台的进步。现在把生产环境迁移到Java 8还为时尚早,但是在接下来的几个月里,它会被大众慢慢的接受。毫无疑问,现在是时候让你的代码与Java 8兼容,并且在Java 8足够安全稳定的时候迁移到Java 8。
作为社区对Java 8的认可,最近Pivotal发布了可在生产环境下支持Java 8的Spring Framework 4.0.3
如果你喜欢这篇文章,请订阅我们的邮件列表来查看每周的更新以及免费赠送的白皮书。对于更高级的教程,请查看我们的[JCG学院][JCG]。
我们欢迎你对Java 8中激动人心的特性进行评论!


3 个回复

正序浏览
liucuifu 发表于 2016-5-15 09:28
现在学校教学甚至出外面找工作都用1.7.

是吧……
回复 使用道具 举报
现在学校教学甚至出外面找工作都用1.7.
回复 使用道具 举报
则表达式在线测试工具   
   regex101 是一个非常不错的正则表达式在线测试工具,你可以直接在线测试你的正则表达式哦。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马