乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Java 8那些被冷落的新特性

       集微筆記 2014-05-05

      lambda表達式,lambda表達式,還是lambda表達式。一提到Java 8就只能聽到這個,但這不過是其中的一個新功能而已,Java 8還有許多新的特性——有一些功能強大的新類或者新的用法,還有一些功能則是早就應該加到Java里了。

      這里我準備介紹它的10個我個人認為非常值得了解的新特性??倳幸豢钸m合你的,開始來看下吧。

      • default方法

      這是Java語言的一個新特性,現(xiàn)在接口類里可以包含方法體(這就是default方法)了。這些方法會隱式的添加到實現(xiàn)這個接口的每個子類中。

      這使得你可以在不破壞代碼的前提下擴展原有庫的功能。它絕對是個利器。但從另一個方面來說,這使得接口作為協(xié)議,類作為具體實現(xiàn)的界限開始變得有點模糊。但好處就是,它通過一個很優(yōu)雅的方式使得接口變得更智能,同時還避免了代碼冗余,并且擴展類庫。不好的地方就是,我估計很快就會看到有在接口方法里獲取this引用然后強制轉化成某個具體類型的寫法了。

      • 終止進程

      一旦啟動外部進程的話,當這個進程崩潰,掛起,或者CPU到達100%的時候,你就得回來擦屁股了。Process類現(xiàn)在增加了兩個新的方法,可以來教訓下那些不聽話的進程了。

      第一個是isAlive()方法,有了它你可以判斷進程是否還活著。第二個方法則更加強大,它叫destroyForcibly(),你可以用它來強制的殺掉一個已經(jīng)超時或者不再需要的進程。

      • StampedLock

      提到這個不禁有點小激動。沒有人會喜歡在代碼中使用同步。用了它肯定會降低程序的吞吐量,更糟糕的話還會導致進程掛起。盡管這樣,有時候你卻不得不選擇它。

      當多個進程訪問一個資源的時候,有多種方法可以進行同步。其中用得最多的一種是ReadWriteLock以及基于它的幾種實現(xiàn)。它通過阻塞寫線程的方式來允許多個線程并發(fā)的讀,這樣減少了線程之間的競爭。聽起來還不錯,但實際上這個鎖實在是太太太慢了,尤其是當有許多寫線程的時候。

      因此Java 8引入了一個新的讀寫鎖,叫做StampedLock。它不僅更快,同時還提供了一系列強大的API來實現(xiàn)樂觀鎖,這樣如果沒有寫操作在訪問臨界區(qū)域的話,你只需很低的開銷就能獲取到一個讀鎖。訪問結束后你可以查詢鎖來判斷這期間是否發(fā)生了寫操作,如果有的話再選擇進行重試,升級鎖,或者放棄這個操作。

      這的確是一個非常強大的工具,它本身就值得專門花一篇文章來介紹。這個新玩意兒讓我感到非常激動和興奮,它真的是太棒了。

      想了解更多請點擊這里。

      • 并發(fā)計數(shù)器

      這是多線程程序會用到的另一個小工具。它提供了簡單高效的新接口來實現(xiàn)多線程的并發(fā)讀寫計數(shù)器的功能,和AtomicInteger比起來,它要更快一些。相當贊的工具。

      • Optional

      不好,又有空指針了,這是所有Java開發(fā)人員的痛處。這估計是有史以來最常見的異常了,至少是1965年以來。

      Java 8借鑒了Scala和Haskell,提供了一個新的Optional模板,可以用它來封裝可能為空的引用。這絕不是終結空指針的銀彈,更多只是使API的設計者可以在代碼層面聲明一個方法可能會返回空值,調用方應該注意這種情況。正因為這個,這只對新的API有效,前提是調用方不要讓引用逃逸出封裝類,否則的話引用可能會在外面被不安全的廢棄掉。

      我對這個新的特性真的是又愛又恨。一方面,空指針是一個大問題,只要能解決這個問題的東西我都歡迎。但另一方面,我對它是否能擔此重任執(zhí)懷疑的態(tài)度。這是由于使用它的話需要全公司的集體努力,短期內很難會有見效。除非大力地推廣,否則很可能會功虧一簣。

      • 萬物皆可注解

      還有一個小的改進就是現(xiàn)在Java注解可以支持任意類型了。之前只有像類和方法聲明之類的才能使用注解。在Java 8里面,當類型轉化甚至分配新對象的時候,都可以在聲明變量或者參數(shù)的時候使用注解。這是Java為了更好地支持靜態(tài)分析及檢測工具(比如FireBug)而做的工作中的一部分。這是個很不錯的特性,但是和Java 7的invokeDynamic一樣,它的真正價值取決于社區(qū)以后如何去使用它。

      • 數(shù)值溢出

      這些方法早就該出現(xiàn)在Java的核心類庫里了。我有個癖好就是去測試整型超出2^32時溢出的情況,搞出一些惡心的隨機BUG來(怎么會得到這么奇怪的一個值?)。

      同樣的,這也不是什么銀彈,只不過是提供了一組函數(shù),這樣你在使用+/*操作符進行數(shù)值操作的時候,如果出現(xiàn)了溢出,會拋一個異常。如果我可以決定的話,我會把它作為JVM的默認模式,顯式的標明函數(shù)會出現(xiàn)數(shù)值溢出。

      • 目錄遍歷

      遍歷目錄樹這種事通常都得上Google搜下怎么實現(xiàn)(你很可能用的是Apache.FileUtils)。Java 8給Files類做了一次整容手術,增加了十個新的方法。我最喜歡的一個是walk()方法,它遍歷目錄后會創(chuàng)建出一個惰性的流(文件系統(tǒng)很大的情況下非常有用)。

      • 增強的隨機數(shù)生成

      現(xiàn)在經(jīng)常都在討論密碼或者密鑰容易遭受攻擊的事。程序的安全性是項很復雜的工程,并且很容易出錯。這就是我為什么喜歡這個新的SecureRandom.getinstanceStrong()方法的原因,它能自動選擇出當前JVM可用的最佳的隨機數(shù)生成器。這樣減少了獲取失敗的機率,同時也避免了默認的弱隨機數(shù)生成器可能會導致密鑰或者加密值容易被黑客攻破的問題。

      • Date.toInstant()

      Java 8引入了一個新的日期API。這不難理解,因為現(xiàn)有的這個實在是太難用了。實際上Joda一直以來都是Java日期API的首選。不過盡管有了新的API,但仍有一個嚴重的問題——大量的舊代碼和庫仍然在使用老的API。

      并且我們還知道這種現(xiàn)狀仍將繼續(xù)存在下去。到底該怎么做呢?

      Java 8很優(yōu)雅的解決了這個問題,它給Date類增加了一個新的方法toInstant(),它可以將Date轉化成新的實現(xiàn)。這樣你馬上就可以切換到新的API,盡管現(xiàn)有的代碼還在使用老的日期API(并且在可預見的未來仍將繼續(xù)這樣)。

      如果你覺得有什么遺漏的或者你覺得我有什么講的不對的地方,請不吝賜教。下面的評論框就是為這個而準備的:-)


        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多