熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

多線程開發的捷徑:構建Java並發模型框架

2013-11-23 19:54:46  來源: Java高級技術 

  Java多線程特性為構建高性能的應用提供了極大的方便但是也帶來了不少的麻煩線程間同步數據一致性等煩瑣的問題需要細心的考慮一不小心就會出現一些微妙的難以調試的錯誤

  另外應用邏輯和線程邏輯糾纏在一起會導致程序的邏輯結構混亂難以復用和維護本文試圖給出一個解決這個問題的方案通過構建一個並發模型框架(framework)使得開發多線程的應用變得容易

  基礎知識

  Java語言提供了對於線程很好的支持實現方法小巧優雅對於方法重入的保護信號量(semaphore)和臨界區(critical section)機制的實現都非常簡潔可以很容易的實現多線程間的同步操作從而保護關鍵數據的一致性這些特點使得Java成為面向對象語言中對於多線程特性支持方面的佼佼者(C++正在試圖把boost庫中的對於線程的支持部分納入語言標准)

  Java中內置了對於對象並發訪問的支持每一個對象都有一個監視器(monitor)同時只允許一個線程持有監視器從而進行對對象的訪問那些沒有獲得監視器的線程必須等待直到持有監視器的線程釋放監視器對象通過synchronized關鍵字來聲明線程必須獲得監視器才能進行對自己的訪問

  synchronized聲明僅僅對於一些較為簡單的線程間同步問題比較有效對於哪些復雜的同步問題比如帶有條件的同步問題Java提供了另外的解決方法wait/notify/notifyAll

  獲得對象監視器的線程可以通過調用該對象的wait方法主動釋放監視器等待在該對象的線程等待隊列上此時其他線程可以得到監視器從而訪問該對象之後可以通過調用notify/notifyAll方法來喚醒先前因調用wait方法而等待的線程

  一般情況下對於wait/notify/notifyAll方法的調用都是根據一定的條件來進行的比如經典的生產者/消費者問題中對於隊列空滿的判斷熟悉POSIX的讀者會發現使用wait/notify/notifyAll可以很容易的實現POSIX中的一個線程間的高級同步技術條件變量

  簡單例子

  本文將圍繞一個簡單的例子展開論述這樣可以更容易突出我們解決問題的思路方法本文想向讀者展現的正是這些思路方法這些思路方法更加適用於解決大規模復雜應用中的並發問題考慮一個簡單的例子我們有一個服務提供者它通過一個接口對外提供服務服務內容非常簡單就是在標准輸出上打印Hello World類結構圖如下

  類結構圖Java高級技術免費提供,內容來源於互聯網,本文歸原作者所有。

  • 上一篇文章:

  • 下一篇文章:
  • Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.