当前位置:   article > 正文

jdk8的十大新特性_jdk8 watchservice

jdk8 watchservice

了解jdk8的新特性首先要了解jdk7的新特新都有哪些方面增强:
1.jdk语法上
1.1二进制变量的表示,支持将整数类型用二进制来表示,用Ob开头。
1.2Switch语句支持String类型
1.3Try-with-resource语句
注意:实现Java.lang.AutoCloseable接口的资源都可以放在try中,跟final里面的关闭资源类似;按照声明逆序关闭资源;try块抛出的异常通过Throwable.getSupressed获取
1.4Catch多个异常 说明:catch异常类型为final;生成Bytecode会比多个catch小;rethrow时保存异常类型
1.5数字类型的下划线表示 更友好的表示方式,不过要注意下划线添加的一些标准
1.6泛型实例的创建可以通过类型推断来简化 可以去掉后面new部分的泛型类型,只用<>就可以了
1.7在可变参数方法中传递非具体化参数,改进编译警告和错误
1.8信息更丰富的回溯追踪 就是上面try中try语句和里面的语句同时抛出异常时,异常栈的信息

2.NIO2的一些新特性
1.1Java.nio.file和java.nio.file.attribute包 支持更详细属性,比如权限,所有者
1.2symbolic and hard links 支持
1.3Path 访问文件系统,Files支持各种文件操作
1.4高效的访问metadata信息
1.5递归查找文件树,文件扩展搜索
1.6文件系统修改通知机制
1.7File类操作API兼容
1.8文件随机访问增强mapping a region ,locl a region ,绝对位置读取
1.9AIO Reactor (基于事件)和Proactor
2.1 IO and NEW IO监听文件系统变化通知
通过FileSystem.getDefault().newWatchService()获取watchService,然后将需要监听的path目录注册到这个watchservice中,对于这个目录的文件修改,新增,删除等实践可以配置,然后就自动能监听到响应的事件。
2.2 IO and NEW IO遍历文件树,通过继承SimpleFileVisitor类,实现事件遍历目录树的操作,然后通过Files.walkFileTree(listDir,opts,leteger.MAX_VALUE,walk);这个API来遍历目录树
2.3 AIO异步IO文件和网络 异步IO在Java
NIO2实现了 都是用AsynchronousFileChannel,AsynchronousSocketChanne等实现,关于同步阻塞IO ,同步非阻塞IO,异步阻塞IO和异步非阻塞IO。Java NIO2中就实现了操作系统的异步非阻塞IO。

3 JDBC4.1
3.1可以使用try-with-resources自动关闭Connection,ResultSet,和Statement资源对象
3.2 RowSet1.1:引入RowSetFactory接口和RowSetProvder类,可以创建JDBC driver支持的各种row sets,这里的rowset实现其实是就是将sql语句上的一些操作转为方法的操作,封装了一些功能。
3.3 JDBC-ODBC驱动会在jdbc8中删除

4 并发工具增强
4.1fork-join
最大的增强,充分利用多核特性,将大问题分解成各个小问题,由多个cpu可以同时解决多个子问题,最后合并结果,继承Recursive Task,实现compute方法,然后调用fork计算,最后用join合并结果
4.2ThreadLocalRandon 并发下随机数生成类,保证并发下的随机生成的线程安全,实际上就是使用thread local
4.3phaser类似cycle Barrier和coundownlatch,不过可以动态添加资源减少资源

5.Networking增强
新增URLClassLoader close 方法,可以及时关闭资源,后续重新加载class文件时不会导致资源被占用或者无法释放问题
URLClassLoader.newlnstance(new URL[]{}.close());
新增Sockets Direct Protocol
绕过操作系统的数据拷贝,将数据从一台机器的内存数据通过网络直接传输到另外一台机器的内存中

6.Multithreaded Custom Class Loaders
解决并发下加载class可能导致死锁问题,这个是jdk1.6的一些新版本就解决了,jdk7也做了一些优化。有兴趣的可以仔细从官方文档详细了解

JDK1.8的新特性
1.接口的默认方法
Java 8 允许我们给接口添加一个非抽象的方法实现,只需要使用default关键字即可,这个特征又叫做扩展方法
2.Lambda表达式
在Java8中你就没必要使用这些传统的匿名对象的方式了,Java 8 提供了更简洁的语法,lambda表达式:
Collection.sort(name,(String a,String b)- > {
return b.compareTo(a);
});
3.函数式接口
Lambda表达式是如何在Java的类型系统中表示的呢?每一个lambda表达式都对应一个类型,通常是接口类型。而“函数式接口”是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。因为默认方法 不算抽象方法,所以你也可以给你的函数式接口添加默认方法。
4.方法与构造函数引用
Java 8 允许你使用::关键字来传递方法或者构造函数引用,上面的代码展示了如何引用一个静态方法,我们也可以引用一个对象的方法:
converter =something ::startsWitch;
String converted = converter.convert(“java”);
System.out.println(converted);
5.Lambda作用域
在lambda表达式中访问外层作用域和老版本的匿名对象中的方法很相似。你可以直接访问标记了final的外层局部变量,或者实例的字段以及静态变量
6.访问局部变量
可以直接在lambda表达式中访问外层的局部变量
7.访问对象字段与静态变量
和本地变量不同的是,lambda内部对与实例的字段已经静态变量是及可读又可写。该行为和匿名对象是一致的
8.访问接口的默认方法

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号