freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

[計算機]實戰(zhàn)javaconcurrent(編輯修改稿)

2024-09-19 16:03 本頁面
 

【文章內(nèi)容簡介】 wsdl + ],等待結(jié)果 )。 ()。 ()。 } } else { // 從未進行過驗證,這種情況應(yīng)該只出現(xiàn)在系統(tǒng)啟動初期 // 這時是在做初始化,不應(yīng)該有沖突發(fā)生 (首次驗證節(jié)點: + wsdl)。 node = (wsdl)。 (wsdl, node)。 } (節(jié)點 + () + [ + wsdl + ]驗證結(jié)束,驗證結(jié)果: + ())。 return node。 } /** * 將src的內(nèi)容合并進dest節(jié)點中,不進行深度拷貝 */ private Node mergeNode(Node src, Node dest) { (())。 (())。 (())。 (())。 return dest。 }}package service。import 。import 。import 。import 。/*** 執(zhí)行驗證的任務(wù)類** @author DigitalSonic*/public class ValidationTask implements CallableNode { private static Logger logger = (ValidationTask)。 private String wsdl。 /** * 構(gòu)造方法,傳入節(jié)點的WSDL */ public ValidationTask(String wsdl) { = wsdl。 } /** * 執(zhí)行針對某個節(jié)點的驗證br/ * 如果正有別的線程在執(zhí)行同一節(jié)點的驗證則等待其結(jié)果,不重復(fù)執(zhí)行驗證 */ @Override public Node call() throws Exception { Node node = (wsdl)。 Lock lock = null。 (開始驗證節(jié)點: + wsdl)。 if (node != null) { lock = ()。 if (()) { // 當前沒有其他線程驗證該節(jié)點 (當前沒有其他線程驗證節(jié)點 + () + [ + wsdl + ])。 try { Node result = (wsdl)。 mergeNode(result, node)。 } finally { ()。 } } else { // 當前有別的線程正在驗證該節(jié)點,等待結(jié)果 (當前有別的線程正在驗證節(jié)點 + () + [ + wsdl + ],等待結(jié)果)。 ()。 ()。 } } else { // 從未進行過驗證,這種情況應(yīng)該只出現(xiàn)在系統(tǒng)啟動初期 // 這時是在做初始化,不應(yīng)該有沖突發(fā)生 (首次驗證節(jié)點: + wsdl)。 node = (wsdl)。 (wsdl, node)。 } (節(jié)點 + () + [ + wsdl + ]驗證結(jié)束,驗證結(jié)果: + ())。 return node。 } /** * 將src的內(nèi)容合并進dest節(jié)點中,不進行深度拷貝 */ private Node mergeNode(Node src, Node dest) { (())。 (())。 (())。 (())。 return dest。 }}請注意ValidationTask的call()方法,這里會先檢查節(jié)點是否被鎖定,如果被鎖定則表示當前有另一個線程正在驗證該節(jié)點,那就不用重復(fù)進行驗證。第50行和第51行,那到鎖后立即釋放,這里只是為了等待驗證結(jié)束。講到Lock,就不能不講Conditon,前者代替了synchronized,而后者則代替了Object對象上的wait()、 notify()和notifyAll()方法(Condition中提供了await()、signal()和signalAll()方法),當滿足運行條件前掛起線程。Condition是與Lock結(jié)合使用的,()方法能夠創(chuàng)建與Lock綁定的 Condition實例。JDK的JavaDoc中有一個例子能夠很好地說明Condition的用途及用法:Java代碼class BoundedBuffer { final Lock lock = new ReentrantLock()。 final Condition notFull = ()。 final Condition notEmpty = ()。 final Object[] items = new Object[ 100 ]。 int putptr, takeptr, count。 public void put(Object x) throws InterruptedException { ()。 try { while (count == ) ()。 items[putptr] = x。 if (++putptr == ) putptr = 0 。 ++count。 ()。 } finally { ()。 } } public Object take() throws InterruptedException { ()。 try { while (count == 0 ) ()。 Object x = items[takeptr]。 if (++takeptr == ) takeptr = 0 。 count。 ()。 return x。 } finally { ()。 } }}class BoundedBuffer { final Lock lock = new ReentrantLock()。 final Condition notFull = ()。 final Condition notEmpty = ()。 final Object[] items = new Object[100]。 int putptr, takeptr, count。 public void put(Object x) throws InterruptedException { ()。 try { while (count == ) ()。 items[putptr] = x。 if (++putptr == ) putptr = 0。 ++count。 ()。 } finally { ()。 } } public Object take() throws InterruptedException { ()。 try { while (count == 0) ()。 Object x = items[takeptr]。 if (++takeptr == ) takeptr = 0。 count。 ()。 return x。 } finally { ()。 } }}說到這里,讓我解釋一下之前的例子里為什么沒有選擇Condition來等待驗證結(jié)束。await()方法在調(diào)用時當前線程先要獲得對應(yīng)的鎖,既然我都拿到鎖了,那也就是說驗證已經(jīng)結(jié)束了。并發(fā)集合類集合類是大家編程時經(jīng)常要使用的東西,ArrayList、HashMap什么的,有的則不是,在編寫多線程的程序時使用線程安全的類能省去很多麻煩,但這些類的性能如何呢?,例如 ConcurrentHashMap、ConcurrentLinkedQueue和CopyOnWriteArrayList等等,根據(jù)不同的使用場景。CopyOnWriteArrayList是ArrayList的一個變體,比較適合用在讀取比較頻繁、修改較少的情況下,因為每次修改都要復(fù)制整個底層數(shù)組。ConcurrentHashMap中為Map接口增加了一些方法(例如putIfAbsenct()),同時做了些優(yōu)化,總之灰常之好用,下面的代碼中使用ConcurrentHashMap來作為全局節(jié)點表,完全無需考慮并發(fā)問題。ValidationService中只是聲明(第17 行),具體的使用是在上面的ValidationTask中。Java代碼package service。import 。import 。import 。import 。/*** 執(zhí)行驗證的服務(wù)類** @author DigitalSonic*/public class ValidationService { /** * 全局節(jié)點表 */ public static final MapString, Node NODE_MAP = new ConcurrentHashMapString, Node()。 private ThreadPoolService threadPoolService。 public ValidationService(ThreadPoolService threadPoolService) { this .threadPoolService = threadPoolService。 } /** * 給出一個入口節(jié)點的WSDL,通過廣度遍歷的方式驗證與其相關(guān)的各個節(jié)點 * * @param wsdl 入口節(jié)點WSDL */ public void validate(ListString wsdl) { ListString visitedNodes = new ArrayListString()。 ListString nextRoundNodes = new ArrayListString()。 (wsdl)。 while (() 0 ) {
點擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1