你可能没听过的 Java 8 中的 10 个新特性

你以前听到的谈论关于Java8的所有都是围绕lambda表达式. 但它仅仅是Java8的一部分. Java 8 有许多新特性---一些强大的新类和语法, 还有其他的从一开始就应该具有的东西.

我将要介绍我认为值得了解的10个精华特性. 它们中最少也会有一个或两个你想要试一试, 所以我们开始吧!

Blog_treasure box__

--------------------------------------分割线 --------------------------------------

Java 8 的 Nashorn 引擎

Java 8 中 HashMap 的性能提升

Java 8简明教程

Java 8 彻底改变数据库访问

--------------------------------------分割线 --------------------------------------

1. 默认方法

Java语言一个新添加的特性是你可以为接口(interface)的方法添加方法体(称为默认方法). 这些方法会被隐式地添加到实现这个接口的类中.

这能使你在不破坏代码的情况下为已存在的库添加新功能. 这很明显是个提升. 但另一方面这会混淆接口与类之间的界限, 因为接口用于定义契约, 而类用于定义具体实现. 从好的方面来说, 它会以一种优雅的方式使接口更智能, 并且避免了重复和扩展库. 但坏的方面, 我们稍后就会看到, 接口方法要查询this并将它转换成具体类. Shivers….

2. 进程终止

启动一个外部进程是你所做的事情中的一半-当这个进程崩溃, 挂起或消耗100% CPU时你要返回来对它进行调试. 现在Process类装备了两个新方法来帮助你控制不守规矩的进程.

第一个是 , 它会让你不需要等待进程运行完毕就可以检查这个进程是否仍在运行. 第二个更强大的方法是, 它能让你强制杀死超时或不再需要的进程.

3. StampedLocks

现在有一些令人激动的东西了. 没有人喜欢同步代码. 它是降低你的应用的吞吐量的罪魁祸首(特别是可扩展的应用), 或者更严重--导致应用挂掉. 尽管如此,在某些时候你别无选择.

有很多方法来限制多线程同步访问临界资源. 其中最著名的是读写锁(ReadWriteLock)和与它相关的实现. 它通过允许多线程访问同一资源但阻塞操作资源的线程来减少资源争夺. 这听起来在理论上很不错, 但实际上这个锁是相当慢的, 特别是当有大量写线程时.

注: 读写锁中将资源访问者分为两类:读者和写者, 读者对资源进行只读操作, 写者可操作资源.

Java 8 引入了一种全新的称为StampedLock的读写锁. 这个锁不仅速度更快, 它更为乐观锁提供了一组强大的API, 通过它你可以以最小的代价取得一个读者锁, 甚至在选择期间不希望发生写操作. 在选择结束后你可以通过查询这个锁来查看在选择期间是否有写操作, 在这种情况下你可以选择是否重试, 更新锁还是放弃.

这个锁是个很强大的工具, 它需要一篇专门的文章来描述. 我对这个新玩意儿兴奋得头都晕了--做得好!

更多详情请参阅这里

4. Concurrent Adders

对从事多线程应用的人来说这是另一件小宝贝. 这是一个用于多线程计数器的简单高效的新API, 它比使用AtomicInteger更快. 真他妈酷!

5. Optional Values

哦, 空指针, 所有Java开发者的噩梦. 从一开始(或最少在1965)它可能就是最流行的异常了.

借鉴自Scale和Hashell, Java 8 拥有一个新的称为Optional的模板, 用于封装可能为null的引用. 它绝不是终结null的银弹, 它更是一种方式-让API设计者从代码级别(而不是文档级别)表明一个null值可能会传入一个方法或从一个方法中返回, 以让调用者为null值做好准备. 因此, 这只能在新API下工作, 并且假设调用者不会让引用逃脱这个封装从而导致不安全的解引用.

我不得不说我对这个特性很矛盾. 一方面null有很大问题, 所以我倾向于在null发生前做好所有事. 但另一方面我很怀疑它能否成功.这是因为使用Optional需要全公司不断的努力,但它并没有直接的价值。除非雷厉风行,否则它很可能会被放弃.

更多关于Optional请点击这里

6. 注解任何东西

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/11f7b6b37ac8c389ad99659c6347e638.html