欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

在Java項(xiàng)目中怎么樣實(shí)現(xiàn)調(diào)度多線程-創(chuàng)新互聯(lián)

在Java項(xiàng)目中怎么樣實(shí)現(xiàn)調(diào)度多線程?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)德保免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

        方法一:設(shè)置線程優(yōu)先級(jí)。

        java.lang.Thread 提供了 setPriority(int newPriority) 方法來(lái)設(shè)置線程的優(yōu)先級(jí),但線程的優(yōu)先級(jí)是無(wú)法保障線程的執(zhí)行次序的,優(yōu)先級(jí)只是提高了優(yōu)先級(jí)高的線程獲取 CPU 資源的概率。也就是說(shuō),這個(gè)方法不靠譜。

        方法二:使用線程合并。

        使用 java.lang.Thread 的 join() 方法。比如有線程 a,現(xiàn)在當(dāng)前線程想等待 a 執(zhí)行完之后再往下執(zhí)行,那就可以使用 a.join()。一旦線程使用了 a.join(),那么當(dāng)前線程會(huì)一直等待 a 消亡之后才會(huì)繼續(xù)執(zhí)行。什么時(shí)候 a 消亡?a 的 run() 方法執(zhí)行結(jié)束了 a 就消亡了。

        這個(gè)方法可以有效地進(jìn)行線程調(diào)度,但卻只能局限于等待一個(gè)線程的執(zhí)行調(diào)度。如果要等待 N 個(gè)線程的話,顯然是無(wú)能為力了。而且等待線程必須在被等待線程消亡后才得到繼續(xù)執(zhí)行的指令,無(wú)法做到兩個(gè)線程真正意義上的并發(fā),靈活性較差。

        方法三:使用線程通信。

        java.lang.Object 提供了可以進(jìn)行線程間通信的 wait 與 notify 、notifyAll 等方法。每個(gè) Java 對(duì)象都有一個(gè)隱性的線程鎖的概念,通過(guò)這個(gè)線程鎖的概念我們讓線程間可以進(jìn)行通信,各線程不再埋頭單干。著名的“生產(chǎn)者-消費(fèi)者”模型就是基于這個(gè)原理實(shí)現(xiàn)的。

        這個(gè)方法也可以有效地進(jìn)行線程調(diào)度,而且也不僅僅局限于等待一個(gè)線程的執(zhí)行調(diào)度,具有很大程度上的靈活性。但操作復(fù)雜,不易控制容易造成混亂,程序維護(hù)起來(lái)也不太方便。

        方法四:使用閉鎖。

        閉鎖就像一扇門(mén),在先決條件未達(dá)成之前這扇門(mén)是閉著的,線程無(wú)法通過(guò),先決條件達(dá)成之后,閉鎖打開(kāi),線程就可以繼續(xù)執(zhí)行了。java.util.concurrent.CountDownLatch 是一個(gè)很實(shí)用的閉鎖實(shí)現(xiàn),它提供了 countDown() 和 await() 方法達(dá)成線程執(zhí)行隊(duì)列,這個(gè)方法最適合 M 個(gè)線程等待 N 個(gè)線程執(zhí)行結(jié)束再執(zhí)行的情況。首先初始化一個(gè) CountDownLatch 對(duì)象,比如 CountDownLatch doneSignal = new CountDownLatch(N);該對(duì)象具有 N 作為計(jì)數(shù)閥值,每個(gè)被等待線程通過(guò)對(duì) doneSignal 對(duì)象的持有,使用 countDown() 可以將 doneSignal 的計(jì)數(shù)閥值減一;每個(gè)等待線程通過(guò)對(duì) doneSignal 對(duì)象的持有,使用 await() 阻塞當(dāng)前線程,直到 doneSignal 計(jì)數(shù)閥值減為 0,才繼續(xù)往下執(zhí)行。

        這個(gè)方法也可以有效地進(jìn)行線程調(diào)度,而且比方法三更易于管理,開(kāi)發(fā)者只需控制好 CountDownLatch 即可。但線程執(zhí)行次序管理相對(duì)單一,它只是指出當(dāng)前等待線程的數(shù)量,而且 CountDownLatch 的初始閥值一旦設(shè)置就只能遞減下去,無(wú)法重置。如需遞減過(guò)程中進(jìn)行閥值的重置可以參考 java.util.concurrent.CyclicBarrier。

        不管如何,CountDownLatch 對(duì)于一定條件下的線程隊(duì)列的達(dá)成還是很有用的。對(duì)于復(fù)雜環(huán)境下的線程管理還是卓有成效的。所以熟悉和把握對(duì)它的使用還是很有必要的。

        以下是一個(gè)實(shí)際項(xiàng)目中 CountDownLatch 的使用的例子:

 private Map<Long,DecryptSignalAndPath> afterDecryptFilePathMap = new HashMap<Long,DecryptSignalAndPath>();//TODO 注意容器垃圾數(shù)據(jù)的清理工作 
 class DecryptRunnable implements Runnable { 
   private ServerFileBean serverFile; 
   private Long fid;//指向解密文件 
   private CountDownLatch decryptSignal; 
   protected DecryptRunnable(Long fid, ServerFileBean serverFile, CountDownLatch decryptSignal) { 
     this.fid = fid; 
     this.serverFile = serverFile; 
     this.decryptSignal = decryptSignal; 
   } 
   @Override 
   public void run() { 
     //開(kāi)始解密 
     String afterDecryptFilePath = null; 
     DecryptSignalAndPath decryptSignalAndPath = new DecryptSignalAndPath(); 
     decryptSignalAndPath.setDecryptSignal(decryptSignal); 
     afterDecryptFilePathMap.put(fid, decryptSignalAndPath); 
     afterDecryptFilePath = decryptFile(serverFile); 
     decryptSignalAndPath.setAfterDecryptFilePath(afterDecryptFilePath); 
     decryptSignal.countDown();//通知所有阻塞的線程 
   } 
    
 } 
 class DecryptSignalAndPath { 
   private String afterDecryptFilePath; 
   private CountDownLatch decryptSignal; 
   public String getAfterDecryptFilePath() { 
     return afterDecryptFilePath; 
   } 
   public void setAfterDecryptFilePath(String afterDecryptFilePath) { 
     this.afterDecryptFilePath = afterDecryptFilePath; 
   } 
   public CountDownLatch getDecryptSignal() { 
     return decryptSignal; 
   } 
   public void setDecryptSignal(CountDownLatch decryptSignal) { 
     this.decryptSignal = decryptSignal; 
   } 
 } 

分享名稱:在Java項(xiàng)目中怎么樣實(shí)現(xiàn)調(diào)度多線程-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)鏈接:http://aaarwkj.com/article28/dipscp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、做網(wǎng)站、網(wǎng)站制作、建站公司網(wǎng)站策劃、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
国产三级精品三级专区| 日本97久久久久久精品| 国产精品综合日韩精| 久久人热视频这里只有精品| 久久亚洲精品综合一区| 精品久久久久久久久极品| 亚洲av成人在线观看| 夜夜春国产精品不卡一区二区| 久久热久久热在线视频| 夫妻性生活视频在线免费看| 日韩一区二区精品网站| 七十二式性日韩视频| 九九热精品只有这里有| 免费看国产一级黄色大片| 成年人免费在线观看毛片| 少妇人妻精品一区三区二区| 午夜毛片免费在线播放| 亚洲午夜天堂在线a毛片| 精品久久亚洲一区二区欧美| 国产成+人+综合+亚洲专区| 亚洲综合中文字幕经典av在线 | 精品一区二区久久久久久| 欧美另类精品一区二区三区| 日韩欧美一区二区麻豆| 午夜视频在线观看免费高清国产| 青青草原在线视频观看| 久久人妻蜜桃一区二区三区 | 日本熟熟妇丰满人妻啪啪| 日本一欧美一欧美一亚洲| 国产精品视频一区二区久久| 午夜免费成人在线视频| 亚洲青青草原一区二区| 亚洲国产精品一区一区| 激情亚洲不卡一区二区| 99热久久精品免费精品| 91伊人日本在线视频| 色婷婷激情一区二区三区| 日本大片一区二区免费看| 欧美一区日韩二区在线| 亚洲精品在线观看第一页| 精品久久av一区二区三区|