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

正文內(nèi)容

[計(jì)算機(jī)]實(shí)戰(zhàn)javaconcurrent-wenkub

2022-09-20 16:03:35 本頁面
 

【正文】 ock時(shí)需要自己獲得鎖并在使用后手動(dòng)釋放,這一點(diǎn)與synchronized有所不同,所以通常Lock的使用方式是這樣的:Java代碼和其他資源一樣,線程池在使用完畢后也需要釋放,用shutdown()方法可以關(guān)閉線程池,如果當(dāng)時(shí)池里還有沒有被執(zhí)行的任務(wù),它會(huì)等待任務(wù)執(zhí)行完畢,在等待期間試圖進(jìn)入線程池的任務(wù)將被拒絕。本代碼是在JDK ,如果在JDK ,很可能在invokeAll和invokeAny的地方出錯(cuò)。 public void setPoolSize(int poolSize) { */ * 關(guān)閉當(dāng)前ExecutorService,隨后根據(jù)poolSize創(chuàng)建新的ExecutorService /** } ()。 !()) { */ * param timeout 以毫秒為單位的超時(shí)時(shí)間 } ()。 } catch (ExecutionException e) { (())。 } else { futures = (tasks)。 */ * see invokeAll() * param timeout 以毫秒為單位的超時(shí)時(shí)間,小于0表示不設(shè)定超時(shí) } return invokeAll(tasks, DEFAULT_TASK_TIMEOUT * ())。 */ * 使用線程池中的線程來執(zhí)行任務(wù) /***/public class ThreadPoolService {* 線程池服務(wù)類import 。import 。} setPoolSize( int * 調(diào)整線程池大小 } createExecutorService() { /** } try amp。 */ } } } catch (FutureNode future : futures) { { futures = (tasks)。 if timeout) { * param timeout 以毫秒為單位的超時(shí)時(shí)間,小于0表示不設(shè)定超時(shí) * * see invokeAll(List, long) * execute(Runnable task) { /** setPoolSize(poolSize)。 public ExecutorService = DEFAULT_POOL_SIZE。 poolSize private long static * 默認(rèn)一個(gè)任務(wù)的超時(shí)時(shí)間,單位為毫秒 */ ThreadPoolService {** 線程池服務(wù)類/**import 。import 。Java代碼為了提高檢查的效率,考慮使用多線程。,、 。加上現(xiàn)在很多開發(fā)者接觸到的項(xiàng)目都是打著企業(yè)級(jí)旗號(hào)的B/S項(xiàng)目,大多數(shù)人都很少涉及多線程,這又為本文的主角增加了一份神編寫多線程的程序一直都是一件比較麻煩的事情,要考慮很多事情,處理不好還會(huì)出很多意想不到的麻煩。實(shí)戰(zhàn)java Concurrent時(shí)間:20090924 08:09:55來源:網(wǎng)絡(luò)加上現(xiàn)在很多開發(fā)者接觸到的項(xiàng)目都是打著企業(yè)級(jí)旗號(hào)的B/S項(xiàng)目,大多數(shù)人都很少涉及多線程,這又為本文的主角增加了一份神秘感。內(nèi)容涵蓋了并發(fā)集合類、線程池機(jī)制、同步互斥機(jī)制、線程安全的變量更新工具類、鎖等等常用工具。Executors通過這個(gè)類能夠獲得多種線程池的實(shí)例,例如可以調(diào)用newSingleThreadExecutor()獲得單線程的 ExecutorService,調(diào)用newFixedThreadPool()獲得固定大小線程池的ExecutorService。 。import 。* author DigitalSonic*/public * 默認(rèn)線程池大小 static int /** DEFAULT_TASK_TIMEOUT = executorService。 */ ThreadPoolService( int public } * 在線程池中執(zhí)行所有給定的任務(wù)并取回運(yùn)行結(jié)果,使用默認(rèn)超時(shí)時(shí)間 return } * 在線程池中執(zhí)行所有給定的任務(wù)并取回運(yùn)行結(jié)果 public ListFutureNode futures = null 。 (timeout } (())。 (ExecutionException e) { ()。 * * param timeout 以毫秒為單位的超時(shí)時(shí)間 void ifamp。 { ()。 } public executorService = (poolSize)。 /** public poolSize) { }import 。import 。* public static final long DEFAULT_TASK_TIMEOUT = 1000。 private int setPoolSize(poolSize)。 } /** * 在線程池中執(zhí)行所有給定的任務(wù)并取回運(yùn)行結(jié)果,使用默認(rèn)超時(shí)時(shí)間 * public ListNode invokeAll(ListValidationTask tasks) { ListFutureNode futures = null。 if (timeout 0) { try { } catch (InterruptedException e) { ()。 } /** * 調(diào)整線程池大小 * see createExecutorService() */這里要額外說明一下invokeAll()和invokeAny()方法。明明ValidationTask實(shí)現(xiàn)了 CallableNode,可是它死活不認(rèn),類型不匹配,這時(shí)可以將參數(shù)聲明由ListValidationTask改為 ListCallableNode。也可以用shutdownNow()來關(guān)閉線程池,它會(huì)立刻關(guān)閉線程池,沒有執(zhí)行的任務(wù)作為返回值返回。 ()。}()。packageimport class String name。 String wsdl。 String result = private new /** } * 構(gòu)造節(jié)點(diǎn)對(duì)象,設(shè)置名稱及WSDL this .wsdl = wsdl。 /** public + name + + result。 toString。 // Getter amp。 public name。 public } return } setWsdl(String wsdl) { void String[] getDependencies() { this .dependencies = dependencies。 public lock。package service。* 節(jié)點(diǎn)類*/public class Node { * 默認(rèn)構(gòu)造方法public Node(String name, String wsdl) {/**public String toString() {public void setName(String name) {} = wsdl。public void setResult(String result) {} = dependencies。 。 。* author DigitalSonic*/public implements private wsdl。 */ ValidationTask(String wsdl) { * 如果正有別的線程在執(zhí)行同一節(jié)點(diǎn)的驗(yàn)證則等待其結(jié)果,不重復(fù)執(zhí)行驗(yàn)證 Exception { (開始驗(yàn)證節(jié)點(diǎn): if lock = ()。 (()) { + wsdl + try ()。 // 當(dāng)前有別的線程正在驗(yàn)證該節(jié)點(diǎn),等待結(jié)果 + () + } // 這時(shí)是在做初始化,不應(yīng)該有沖突發(fā)生 + wsdl)。 + () + + ())。 node。 /** (())。 return }import 。* 執(zhí)行驗(yàn)證的任務(wù)類*/public class ValidationTask implements CallableNode { = wsdl。 } Node node = (wsdl)。 Lock lock = null。 (開始驗(yàn)證節(jié)點(diǎn): + wsdl)。 if (node != null) { Node result = (wsdl)。 mergeNode(result, node)。 } finally { (當(dāng)前有別的線程正在驗(yàn)證節(jié)點(diǎn) + () + [ + wsdl + ],等待結(jié)果)。 ()。 ()。 } (首次驗(yàn)證節(jié)點(diǎn): + wsdl)。 node = (wsdl)。 (wsdl, node)。 } (())。 (())。 (())。 (())。 return dest。 }}請(qǐng)注意ValidationTask的call()方法,這里會(huì)先檢查節(jié)點(diǎn)是否被鎖定,如果被鎖定則表示當(dāng)前有另一個(gè)線程正在驗(yàn)證該節(jié)點(diǎn),那就不用重復(fù)進(jìn)行驗(yàn)證。JDK的JavaDoc中有一個(gè)例子能夠很好地說明Condition的用途及用法:Java代碼 Lock lock = Condition notFull Condition notEmpty = ()。 Object[ 100 ]。 void try if ()。 { ()。 throws (count == ()。 (++takeptr == ) takeptr = return } finally } }}class BoundedBuffer { int putptr, takeptr, count。 try { ()。 } public Object take() throws InterruptedException { ()。 ()。 return x。 }}說到這里,讓我解釋一下之前的例子里為什么沒有選擇Condition來等待驗(yàn)證結(jié)束。ConcurrentHashMap中為Map接口增加了一些方法(例如putIfAbsenct()),同時(shí)做了些優(yōu)化,總之灰常之好用,下面的代碼中使用Concurr
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1