中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

怎樣進(jìn)入公眾號(hào)平臺(tái)青島百度seo代理

怎樣進(jìn)入公眾號(hào)平臺(tái),青島百度seo代理,網(wǎng)站建設(shè)空標(biāo)記,公司建設(shè)的網(wǎng)站屬于無(wú)形資產(chǎn)嗎最近面試遇到的一道題,需要三個(gè)線(xiàn)程交替打印0-100,當(dāng)時(shí)對(duì)多線(xiàn)程并不是很熟悉因此沒(méi)怎么寫(xiě)出來(lái),網(wǎng)上搜了之后得到現(xiàn) synchronized wait/notifyAll 實(shí)現(xiàn)思路:判斷當(dāng)前打印數(shù)字和線(xiàn)程數(shù)的取余,不等于當(dāng)前線(xiàn)程則處于等待…

最近面試遇到的一道題,需要三個(gè)線(xiàn)程交替打印0-100,當(dāng)時(shí)對(duì)多線(xiàn)程并不是很熟悉因此沒(méi)怎么寫(xiě)出來(lái),網(wǎng)上搜了之后得到現(xiàn)

synchronized + wait/notifyAll

實(shí)現(xiàn)思路:判斷當(dāng)前打印數(shù)字和線(xiàn)程數(shù)的取余,不等于當(dāng)前線(xiàn)程則處于等待狀態(tài)。循環(huán)結(jié)束喚醒所有等待線(xiàn)程。

public class PrintExample {//創(chuàng)建一個(gè)公共鎖對(duì)象private static final Object Lock = new Object();//執(zhí)行線(xiàn)程數(shù)private static final int THREAD_COUNT = 3;//打印數(shù)字的起始點(diǎn)private static volatile int START = 0;//打印數(shù)字的結(jié)束點(diǎn)private static final int END = 100;private static class Print implements Runnable{private final int index;public Print(int index){this.index = index;}@Overridepublic void run() {while(START<END){synchronized (Lock){//START和線(xiàn)程數(shù)進(jìn)行取余,如果不等于當(dāng)前線(xiàn)程的則等待while(START % THREAD_COUNT != index){try{Lock.wait();}catch (Exception e){e.printStackTrace();}}//否則進(jìn)行輸出if(START<=END){System.out.println("Thread" + (index+1) +  ",打印結(jié)果:" + START);}START++;//喚醒等待線(xiàn)程Lock.notifyAll();}}}public static void main(String[] args) {for(int i = 0; i < THREAD_COUNT; i++){new Thread(new Print(i)).start();}}}
}

ReetrantLock + await/signalAll

實(shí)現(xiàn)思路:實(shí)現(xiàn)方式和synchronized + wait/notifyAll兒乎完全一樣。我們只需要4步:
1.synchronized 替換為ReentrantLock

2.根據(jù)鎖對(duì)象創(chuàng)建一個(gè)Condition對(duì)象

3.wait替換成await

4.notifyAll 替換為 signalAll
?

public class PrintExample {//創(chuàng)建一個(gè)公共鎖對(duì)象private static final ReentrantLock Lock = new ReentrantLock();//根據(jù)鎖對(duì)象創(chuàng)建一個(gè)Condition對(duì)象private static final Condition CONDITION = Lock.newCondition();//執(zhí)行線(xiàn)程數(shù)private static final int THREAD_COUNT = 3;//打印數(shù)字的起始點(diǎn)private static volatile int START = 0;//打印數(shù)字的結(jié)束點(diǎn)private static final int END = 100;private static class Print implements Runnable{private final int index;public Print(int index){this.index = index;}@Overridepublic void run() {while(START<END){Lock.lock();try {//START和線(xiàn)程數(shù)進(jìn)行取余,如果不等于當(dāng)前線(xiàn)程的則等待while(START % THREAD_COUNT != index){try{CONDITION.await();}catch (Exception e){e.printStackTrace();}}//否則進(jìn)行輸出if(START<=END){System.out.println("Thread" + (index+1) +  ",打印結(jié)果:" + START);}START++;//喚醒等待線(xiàn)程CONDITION.signalAll();}catch (Exception e){e.printStackTrace();}finally {Lock.unlock();}}}public static void main(String[] args) {for(int i = 0; i < THREAD_COUNT; i++){new Thread(new Print(i)).start();}}}
}

ReetrantLock + await/signal

因?yàn)镃ondition相對(duì)wait/notify方式,可以喚醒指定線(xiàn)程。那我們就完全不用每次都喚醒全部線(xiàn)程,僅需要喚醒下一次需要執(zhí)行的線(xiàn)程就可以了。
相比較 ReentrantLock + await/signalAll 改進(jìn)方法:
1.去除公共的Condition對(duì)象,替換為L(zhǎng)ist<Condition> conditions;
2.調(diào)用"下一個(gè)線(xiàn)程的"Condition對(duì)象的signal方法喚醒下一個(gè)線(xiàn)程;

public class PrintExample {//創(chuàng)建一個(gè)公共鎖對(duì)象private static final ReentrantLock Lock = new ReentrantLock();//根據(jù)鎖對(duì)象創(chuàng)建一個(gè)Condition對(duì)象//private static final Condition CONDITION = Lock.newCondition();//執(zhí)行線(xiàn)程數(shù)private static final int THREAD_COUNT = 3;//打印數(shù)字的起始點(diǎn)private static volatile int START = 0;//打印數(shù)字的結(jié)束點(diǎn)private static final int END = 100;private static class Print implements Runnable{private final int index;private final List<Condition> conditions;public Print(int index,List<Condition> conditions){this.index = index;this.conditions = conditions;}//只喚醒下一個(gè)線(xiàn)程private void signalNext(){int nextIndex = (index + 1) % THREAD_COUNT;conditions.get(nextIndex).signal();}@Overridepublic void run() {while(START<END){Lock.lock();try {//START和線(xiàn)程數(shù)進(jìn)行取余,如果不等于當(dāng)前線(xiàn)程的則等待while(START % THREAD_COUNT != index){try{conditions.get(index).await();}catch (Exception e){e.printStackTrace();}}//否則進(jìn)行輸出if(START<=END){System.out.println("Thread" + (index+1) +  ",打印結(jié)果:" + START);}START++;//喚醒等待線(xiàn)程signalNext();}catch (Exception e){e.printStackTrace();}finally {Lock.unlock();}}}public static void main(String[] args) {List<Condition> conditionList = new ArrayList<>();conditionList.add(Lock.newCondition());conditionList.add(Lock.newCondition());conditionList.add(Lock.newCondition());for(int i = 0; i < THREAD_COUNT; i++){new Thread(new Print(i,conditionList)).start();}}}
}

此處使用?List<Condition> conditions讓每個(gè)線(xiàn)程都擁有屬于自己的condition,這樣可以單獨(dú)喚醒和等待。

Condition是什么

概念:

condition可以理解為條件隊(duì)列。當(dāng)一個(gè)線(xiàn)程在調(diào)用了其await方法以后,直到線(xiàn)程等待的某個(gè)條件為真的時(shí)候才會(huì)被喚醒。Condition必須要配合鎖一起使用,因?yàn)閷?duì)共享狀態(tài)變量的訪(fǎng)問(wèn)發(fā)生在多線(xiàn)程環(huán)境下。一個(gè)Condition的實(shí)例必須與一個(gè)Lock綁定,因此Condition一般都是作為L(zhǎng)ock的內(nèi)部實(shí)現(xiàn)

方法:

Condition依賴(lài)于Lock接口

方法解釋
lock.newCondition()生成一個(gè)Condition
await()對(duì)應(yīng)Object的wait();使線(xiàn)程等待
signal()對(duì)應(yīng)Object的notify();喚醒線(xiàn)程

注意:調(diào)用Condition的await()和signal()方法,都必須在lock.lock()和lock.unlock()之間使用

在生產(chǎn)者和消費(fèi)者中Condition的執(zhí)行方式:

  • 當(dāng)在線(xiàn)程Consumer中調(diào)用await方法后,線(xiàn)程Consumer將釋放鎖,并且將自己沉睡,等待喚醒。
  • 這時(shí)等到線(xiàn)程Producer獲取到鎖后,開(kāi)始執(zhí)行任務(wù),完畢后,調(diào)用Condition的signalall方法,喚醒線(xiàn)程Consumer,線(xiàn)程Consumer恢復(fù)執(zhí)行。

以上說(shuō)明Condition是一個(gè)多線(xiàn)程間協(xié)調(diào)通信的工具類(lèi),使得某個(gè)或某些線(xiàn)程一起等待某個(gè)條件(Condition),只有當(dāng)該條件具備( signal 或者 signalAll方法被帶調(diào)用)時(shí) ,這些等待線(xiàn)程才會(huì)被喚醒,從而重新?tīng)?zhēng)奪鎖

?

http://www.risenshineclean.com/news/3077.html

相關(guān)文章:

  • 如何檢測(cè)網(wǎng)站開(kāi)發(fā)商留有后門(mén)網(wǎng)站seo是什么
  • 可以在手機(jī)建網(wǎng)站的百度網(wǎng)盤(pán)網(wǎng)址
  • 青島專(zhuān)業(yè)做網(wǎng)站的目前最火的自媒體平臺(tái)
  • 互動(dòng)網(wǎng)站案例培訓(xùn)教育機(jī)構(gòu)
  • 熊貓辦公ppt模板下載seo外包公司報(bào)價(jià)
  • 個(gè)體工商戶(hù)怎么做網(wǎng)站搜索引擎優(yōu)化英文簡(jiǎn)稱(chēng)
  • html網(wǎng)站開(kāi)發(fā)論文新人跑業(yè)務(wù)怎么找客戶(hù)
  • 網(wǎng)站功能結(jié)構(gòu)圖 怎么做鄭州網(wǎng)絡(luò)營(yíng)銷(xiāo)顧問(wèn)
  • 餐飲管理培訓(xùn)課程成都百度seo推廣
  • 企業(yè)門(mén)戶(hù)網(wǎng)站設(shè)計(jì)方案如何推廣自己產(chǎn)品
  • 如何使用模板網(wǎng)站建設(shè)網(wǎng)頁(yè)seo系統(tǒng)是什么
  • 網(wǎng)站做的好的公司名稱(chēng)泉州百度關(guān)鍵詞優(yōu)化
  • 網(wǎng)站開(kāi)發(fā)公司經(jīng)營(yíng)范圍手機(jī)百度賬號(hào)申請(qǐng)注冊(cè)
  • 企業(yè)做網(wǎng)站平臺(tái)的好處鶴壁seo推廣
  • 許昌知名網(wǎng)站建設(shè)價(jià)格重慶發(fā)布的最新消息今天
  • 宣傳網(wǎng)站建設(shè)意義查看百度關(guān)鍵詞價(jià)格
  • 阿圖什網(wǎng)站寧波核心關(guān)鍵詞seo收費(fèi)
  • 網(wǎng)站 展示百度搜索風(fēng)云榜總榜
  • 北京澳環(huán)網(wǎng)站拼多多關(guān)鍵詞怎么優(yōu)化
  • 甜品網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)網(wǎng)站首頁(yè)不收錄
  • 做英文行程的網(wǎng)站汕頭自動(dòng)seo
  • 濟(jì)南企業(yè)做網(wǎng)站網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃案例
  • 寧波網(wǎng)站建設(shè)方案報(bào)價(jià)四川seo平臺(tái)
  • 不花錢(qián)自己可以做網(wǎng)站嗎專(zhuān)門(mén)搜索知乎內(nèi)容的搜索引擎
  • 宣傳冊(cè)內(nèi)容排版揚(yáng)州seo
  • 怎樣php網(wǎng)站建設(shè)河南網(wǎng)站建設(shè)公司哪家好
  • 北京智能網(wǎng)站建設(shè)系統(tǒng)加盟怎么用網(wǎng)絡(luò)推廣業(yè)務(wù)
  • 在做網(wǎng)站編代碼網(wǎng)頁(yè)導(dǎo)航條中的文字出現(xiàn)在導(dǎo)航條的下方怎莫解決東莞有限公司seo
  • 網(wǎng)站建設(shè)的一般步驟精準(zhǔn)粉絲引流推廣
  • 成都哪里做網(wǎng)站便宜百度的合作網(wǎng)站有哪些