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

正文內(nèi)容

[計算機(jī)]實戰(zhàn)javaconcurrent(已修改)

2025-09-04 16:03 本頁面
 

【正文】 實戰(zhàn)java Concurrent時間:20090924 08:09:55來源:網(wǎng)絡(luò)作者:未知點擊:1686次編寫多線程的程序一直都是一件比較麻煩的事情,要考慮很多事情,處理不好還會出很多意想不到的麻煩。加上現(xiàn)在很多開發(fā)者接觸到的項目都是打著企業(yè)級旗號的B/S項目,大多數(shù)人都很少涉及多線程,這又為本文的主角增加了一份神編寫多線程的程序一直都是一件比較麻煩的事情,要考慮很多事情,處理不好還會出很多意想不到的麻煩。加上現(xiàn)在很多開發(fā)者接觸到的項目都是打著企業(yè)級旗號的B/S項目,大多數(shù)人都很少涉及多線程,這又為本文的主角增加了一份神秘感。講到Java多線程,大多數(shù)人腦海中跳出來的是Thread、Runnable、synchronized……這些是最基本的東西,雖然已經(jīng)足夠強(qiáng)大,但想要用好還真不容易。從JDK ,它的引入大大簡化了多線程程序的開發(fā)(要感謝一下大牛Doug Lee)。,、 。內(nèi)容涵蓋了并發(fā)集合類、線程池機(jī)制、同步互斥機(jī)制、線程安全的變量更新工具類、鎖等等常用工具。為了便于理解,本文使用一個例子來做說明,交代一下它的場景:假設(shè)要對一套10個節(jié)點組成的環(huán)境進(jìn)行檢查,這個環(huán)境有兩個入口點,通過節(jié)點間的依賴關(guān)系可以遍歷到整個環(huán)境。依賴關(guān)系可以構(gòu)成一張有向圖,可能存在環(huán)。為了提高檢查的效率,考慮使用多線程。Executors通過這個類能夠獲得多種線程池的實例,例如可以調(diào)用newSingleThreadExecutor()獲得單線程的 ExecutorService,調(diào)用newFixedThreadPool()獲得固定大小線程池的ExecutorService。拿到 ExecutorService可以做的事情就比較多了,最簡單的是用它來執(zhí)行Runnable對象,也可以執(zhí)行一些實現(xiàn)了 CallableT的對象。用Thread的start()方法沒有返回值,如果該線程執(zhí)行的方法有返回值那用 ExecutorService就再好不過了,可以選擇submit()、invokeAll()或者invokeAny(),根據(jù)具體情況選擇合適的方法即可。Java代碼package service。import 。import 。import 。import 。import 。import 。import 。/*** 線程池服務(wù)類** @author DigitalSonic*/public class ThreadPoolService { /** * 默認(rèn)線程池大小 */ public static final int DEFAULT_POOL_SIZE = 5 。 /** * 默認(rèn)一個任務(wù)的超時時間,單位為毫秒 */ public static final long DEFAULT_TASK_TIMEOUT = 1000 。 private int poolSize = DEFAULT_POOL_SIZE。 private ExecutorService executorService。 /** * 根據(jù)給定大小創(chuàng)建線程池 */ public ThreadPoolService( int poolSize) { setPoolSize(poolSize)。 } /** * 使用線程池中的線程來執(zhí)行任務(wù) */ public void execute(Runnable task) { (task)。 } /** * 在線程池中執(zhí)行所有給定的任務(wù)并取回運(yùn)行結(jié)果,使用默認(rèn)超時時間 * * @see invokeAll(List, long) */ public ListNode invokeAll(ListValidationTask tasks) { return invokeAll(tasks, DEFAULT_TASK_TIMEOUT * ())。 } /** * 在線程池中執(zhí)行所有給定的任務(wù)并取回運(yùn)行結(jié)果 * * @param timeout 以毫秒為單位的超時時間,小于0表示不設(shè)定超時 * @see invokeAll() */ public ListNode invokeAll(ListValidationTask tasks, long timeout) { ListNode nodes = new ArrayListNode(())。 try { ListFutureNode futures = null 。 if (timeout 0 ) { futures = (tasks)。 } else { futures = (tasks, timeout, )。 } for (FutureNode future : futures) { try { (())。 } catch (ExecutionException e) { ()。 } } } catch (InterruptedException e) { ()。 } return nodes。 } /** * 關(guān)閉當(dāng)前ExecutorService * * @param timeout 以毫秒為單位的超時時間 */ public void destoryExecutorService( long timeout) { if (executorService != null amp。amp。 !()) { try { (timeout, )。 } catch (InterruptedException e) { ()。 } ()。 } } /** * 關(guān)閉當(dāng)前ExecutorService,隨后根據(jù)poolSize創(chuàng)建新的ExecutorService */ public void createExecutorService() { destoryExecutorService(1000 )。 executorService = (poolSize)。 } /** * 調(diào)整線程池大小 * @see createExecutorService() */ public void setPoolSize( int poolSize) { this .poolSize = poolSize。 createExecutorService()。 }}package service。import 。import 。import 。import 。import 。import 。import 。/*** 線程池服務(wù)類** @author DigitalSonic*/public class ThreadPoolService { /** * 默認(rèn)線程池大小 */ public static final int DEFAULT_POOL_SIZE = 5。 /** * 默認(rèn)一個任務(wù)的超時時間,單位為毫秒 */ public static final long DEFAULT_TASK_TIMEOUT = 1000。 private int poolSize = DEFAULT_POOL_SIZE。 private ExecutorService executorService。 /** * 根據(jù)給定大小創(chuàng)建線程池 */ public ThreadPoolService(int poolSize) { setPoolSize(poolSize)。 } /** * 使用線程池中的線程來執(zhí)行任務(wù) */ public void execute(Runnable task) { (task)。 } /** * 在線程池中執(zhí)行所有給定的任務(wù)并取回運(yùn)行結(jié)果,使用默認(rèn)超時時間 * * @see invokeAll(List, long) */ public ListNode invokeAll(ListValidationTask tasks) { return invokeAll(tasks, DEFAULT_TASK_TIMEOUT * ())。 } /** * 在線程池中執(zhí)行所有給定的任務(wù)并取回運(yùn)行結(jié)果 * * @param timeout 以毫秒為單位的超時時間,小于0表示不設(shè)定超時 * @see invokeAll() */ public ListNode invokeAll(ListValidationTask tasks, long timeout) { ListNode nodes = new ArrayListNode(())。 try { ListFutureNode futures = null。 if (timeout 0) { futures = (tasks)。 } else { futures = (tasks, timeout, )。 } for (FutureNode future : futures) { try { (())。 } catch (ExecutionException e) { ()。 } } } catch (InterruptedException e) { ()。 } return nod
點擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1