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

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

如何查看網(wǎng)站是哪家公司做的百度2022第三季度財(cái)報(bào)

如何查看網(wǎng)站是哪家公司做的,百度2022第三季度財(cái)報(bào),河北省網(wǎng)站備案管理系統(tǒng),wordpress插件1、定義 即 Guarded Suspension,用在一個(gè)線程等待另一個(gè)線程的執(zhí)行結(jié)果 要點(diǎn) 有一個(gè)結(jié)果需要從一個(gè)線程傳遞到另一個(gè)線程,讓他們關(guān)聯(lián)同一個(gè) GuardedObject 如果有結(jié)果不斷從一個(gè)線程到另一個(gè)線程那么可以使用消息隊(duì)列 JDK 中,join 的實(shí)現(xiàn)…

1、定義

即 Guarded Suspension,用在一個(gè)線程等待另一個(gè)線程的執(zhí)行結(jié)果

要點(diǎn)

  • 有一個(gè)結(jié)果需要從一個(gè)線程傳遞到另一個(gè)線程,讓他們關(guān)聯(lián)同一個(gè) GuardedObject

  • 如果有結(jié)果不斷從一個(gè)線程到另一個(gè)線程那么可以使用消息隊(duì)列

  • JDK 中,join 的實(shí)現(xiàn)、Future 的實(shí)現(xiàn),采用的就是此模式

  • 因?yàn)橐却硪环降慕Y(jié)果,因此歸類到同步模式

2、實(shí)現(xiàn)

class GuardedObject {
?// 結(jié)果private Object response;private final Object lock = new Object();
?// 獲取結(jié)果public Object get() {synchronized (lock) {// 條件不滿足則等待while (response == null) {try {lock.wait();} catch (InterruptedException e) {e.printStackTrace();}}return response;}}
?// 產(chǎn)生結(jié)果public void complete(Object response) {synchronized (lock) {// 條件滿足,通知等待線程this.response = response;lock.notifyAll();}}
}

3、應(yīng)用

一個(gè)線程等待另一個(gè)線程的執(zhí)行結(jié)果

public static void main(String[] args) {GuardedObject guardedObject = new GuardedObject();new Thread(() -> {try {// 子線程執(zhí)行下載List<String> response = download(); // 模擬下載操作log.debug("download complete...");guardedObject.complete(response);} catch (IOException e) {e.printStackTrace();}}).start();
?log.debug("waiting...");// 主線程阻塞等待Object response = guardedObject.get();log.debug("get response: [{}] lines", ((List<String>) response).size());
?
}

執(zhí)行結(jié)果

08:42:18.568 [main] c.TestGuardedObject - waiting...
08:42:23.312 [Thread-0] c.TestGuardedObject - download complete...
08:42:23.312 [main] c.TestGuardedObject - get response: [3] lines

4、帶超時(shí)版 GuardedObject

如果要控制超時(shí)時(shí)間呢

class GuardedObjectV2 {
?private Object response;private final Object lock = new Object();
?public Object get(long millis) {synchronized (lock) {// 1) 記錄最初時(shí)間long begin = System.currentTimeMillis();// 2) 已經(jīng)經(jīng)歷的時(shí)間long timePassed = 0;while (response == null) {// 4) 假設(shè) millis 是 1000,結(jié)果在 400 時(shí)喚醒了,那么還有 600 要等long waitTime = millis - timePassed;log.debug("waitTime: {}", waitTime);if (waitTime <= 0) {log.debug("break...");break;}try {lock.wait(waitTime); ?// 注意這里并不是 mills,防止虛假喚醒} catch (InterruptedException e) {e.printStackTrace();}// 3) 如果提前被喚醒,這時(shí)已經(jīng)經(jīng)歷的時(shí)間假設(shè)為 400timePassed = System.currentTimeMillis() - begin;log.debug("timePassed: {}, object is null {}", timePassed, response == null);}return response;}}
?public void complete(Object response) {synchronized (lock) {// 條件滿足,通知等待線程this.response = response;log.debug("notify...");lock.notifyAll();}}
}

測(cè)試,沒有超時(shí)

public static void main(String[] args) {GuardedObjectV2 v2 = new GuardedObjectV2();new Thread(() -> {sleep(1); // 睡眠1秒v2.complete(null);sleep(1);v2.complete(Arrays.asList("a", "b", "c"));}).start();
?Object response = v2.get(2500);if (response != null) {log.debug("get response: [{}] lines", ((List<String>) response).size());} else {log.debug("can't get response");}
}

輸出

08:49:39.917 [main] c.GuardedObjectV2 - waitTime: 2500
08:49:40.917 [Thread-0] c.GuardedObjectV2 - notify...
08:49:40.917 [main] c.GuardedObjectV2 - timePassed: 1003, object is null true
08:49:40.917 [main] c.GuardedObjectV2 - waitTime: 1497
08:49:41.918 [Thread-0] c.GuardedObjectV2 - notify...
08:49:41.918 [main] c.GuardedObjectV2 - timePassed: 2004, object is null false
08:49:41.918 [main] c.TestGuardedObjectV2 - get response: [3] lines

測(cè)試,超時(shí)

// 等待時(shí)間不足
List<String> lines = v2.get(1500);

輸出

08:47:54.963 [main] c.GuardedObjectV2 - waitTime: 1500
08:47:55.963 [Thread-0] c.GuardedObjectV2 - notify...
08:47:55.963 [main] c.GuardedObjectV2 - timePassed: 1002, object is null true
08:47:55.963 [main] c.GuardedObjectV2 - waitTime: 498
08:47:56.461 [main] c.GuardedObjectV2 - timePassed: 1500, object is null true
08:47:56.461 [main] c.GuardedObjectV2 - waitTime: 0
08:47:56.461 [main] c.GuardedObjectV2 - break...
08:47:56.461 [main] c.TestGuardedObjectV2 - can't get response
08:47:56.963 [Thread-0] c.GuardedObjectV2 - notify...

5、多任務(wù)版 GuardedObject

圖中 Futures 就好比居民樓一層的信箱(每個(gè)信箱有房間編號(hào)),左側(cè)的 t0,t2,t4 就好比等待郵件的居民,右側(cè)的 t1,t3,t5 就好比郵遞員

如果需要在多個(gè)類之間使用 GuardedObject 對(duì)象,作為參數(shù)傳遞不是很方便,因此設(shè)計(jì)一個(gè)用來解耦的中間類,這樣不僅能夠解耦【結(jié)果等待者】和【結(jié)果生產(chǎn)者】,還能夠同時(shí)支持多個(gè)任務(wù)的管理

新增 id 用來標(biāo)識(shí) Guarded Object

class GuardedObject {
?// 標(biāo)識(shí) Guarded Objectprivate int id;
?public GuardedObject(int id) {this.id = id;}
?public int getId() {return id;}
?// 結(jié)果private Object response;
?// 獲取結(jié)果// timeout 表示要等待多久 2000public Object get(long timeout) {synchronized (this) {// 開始時(shí)間 15:00:00long begin = System.currentTimeMillis();// 經(jīng)歷的時(shí)間long passedTime = 0;while (response == null) {// 這一輪循環(huán)應(yīng)該等待的時(shí)間long waitTime = timeout - passedTime;// 經(jīng)歷的時(shí)間超過了最大等待時(shí)間時(shí),退出循環(huán)if (timeout - passedTime <= 0) {break;}try {this.wait(waitTime); // 虛假喚醒 15:00:01} catch (InterruptedException e) {e.printStackTrace();}// 求得經(jīng)歷時(shí)間passedTime = System.currentTimeMillis() - begin; // 15:00:02  1s}return response;}}
?// 產(chǎn)生結(jié)果public void complete(Object response) {synchronized (this) {// 給結(jié)果成員變量賦值this.response = response;this.notifyAll();}}
}

中間解耦類

class Mailboxes {private static Map<Integer, GuardedObject> boxes = new Hashtable<>();
?private static int id = 1;// 產(chǎn)生唯一 idprivate static synchronized int generateId() {return id++;}
?public static GuardedObject getGuardedObject(int id) {return boxes.remove(id); ?// 注意這里的remove,防止堆溢出}
?public static GuardedObject createGuardedObject() {GuardedObject go = new GuardedObject(generateId());boxes.put(go.getId(), go);return go;}
?public static Set<Integer> getIds() {return boxes.keySet();}
}

業(yè)務(wù)相關(guān)類

class People extends Thread{@Overridepublic void run() {// 收信GuardedObject guardedObject = Mailboxes.createGuardedObject();log.debug("開始收信 id:{}", guardedObject.getId());Object mail = guardedObject.get(5000);log.debug("收到信 id:{}, 內(nèi)容:{}", guardedObject.getId(), mail);}
}
class Postman extends Thread {private int id;private String mail;
?public Postman(int id, String mail) {this.id = id;this.mail = mail;}
?@Overridepublic void run() {GuardedObject guardedObject = Mailboxes.getGuardedObject(id);log.debug("送信 id:{}, 內(nèi)容:{}", id, mail);guardedObject.complete(mail);}
}

測(cè)試

public static void main(String[] args) throws InterruptedException {for (int i = 0; i < 3; i++) {new People().start();}Sleeper.sleep(1);// 睡眠1秒for (Integer id : Mailboxes.getIds()) {new Postman(id, "內(nèi)容" + id).start();}
}

某次運(yùn)行結(jié)果

10:35:05.689 c.People [Thread-1] - 開始收信 id:3
10:35:05.689 c.People [Thread-2] - 開始收信 id:1
10:35:05.689 c.People [Thread-0] - 開始收信 id:2
10:35:06.688 c.Postman [Thread-4] - 送信 id:2, 內(nèi)容:內(nèi)容2
10:35:06.688 c.Postman [Thread-5] - 送信 id:1, 內(nèi)容:內(nèi)容1
10:35:06.688 c.People [Thread-0] - 收到信 id:2, 內(nèi)容:內(nèi)容2
10:35:06.688 c.People [Thread-2] - 收到信 id:1, 內(nèi)容:內(nèi)容1
10:35:06.688 c.Postman [Thread-3] - 送信 id:3, 內(nèi)容:內(nèi)容3
10:35:06.689 c.People [Thread-1] - 收到信 id:3, 內(nèi)容:內(nèi)容3

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

相關(guān)文章:

  • 攝影網(wǎng)站設(shè)計(jì)圖片網(wǎng)絡(luò)營銷服務(wù)的特點(diǎn)
  • 做網(wǎng)上兼職的網(wǎng)站優(yōu)秀營銷軟文范例800字
  • 怎樣建設(shè)一個(gè)購物網(wǎng)站廣州疫情升級(jí)
  • 昆明網(wǎng)站建設(shè)加q.479185700松原市新聞
  • designer怎么做網(wǎng)站四川網(wǎng)站seo
  • 學(xué)校網(wǎng)站建設(shè)企業(yè)接推廣怎么收費(fèi)
  • 廈門中小企業(yè)網(wǎng)站制作網(wǎng)絡(luò)媒體發(fā)稿平臺(tái)
  • 做圖片網(wǎng)站 服務(wù)器蘇州網(wǎng)站制作開發(fā)公司
  • 河南洛陽網(wǎng)站建設(shè)seo工具下載
  • 企業(yè)網(wǎng)站建設(shè)費(fèi)現(xiàn)金流科目seo公司官網(wǎng)
  • 中國最大的新聞網(wǎng)站合肥seo推廣排名
  • bc源碼 網(wǎng)站 搭建創(chuàng)意營銷點(diǎn)子
  • 國外有哪些做服裝的網(wǎng)站百度統(tǒng)計(jì)代碼安裝位置
  • 福州建設(shè)銀行社會(huì)招聘網(wǎng)站電商網(wǎng)站seo怎么做
  • 用云速成美站怎么做網(wǎng)站360地圖下載最新版
  • 找網(wǎng)站做q幣如何推廣自己的網(wǎng)站
  • 在國內(nèi)做跨境電商怎么上外國網(wǎng)站杭州網(wǎng)站優(yōu)化服務(wù)
  • 項(xiàng)目名稱有創(chuàng)意大全搜索引擎優(yōu)化是什么
  • 做空比特幣網(wǎng)站網(wǎng)店?duì)I銷策略有哪些
  • 網(wǎng)站建設(shè)新趨勢(shì)百度網(wǎng)盤網(wǎng)頁版登錄
  • 南京市高淳區(qū)城鄉(xiāng)建設(shè)局網(wǎng)站營銷型網(wǎng)站推廣
  • 客戶網(wǎng)站建設(shè)市場(chǎng)推廣方案和思路
  • bootstrap做自己的網(wǎng)站北京seo公司工作
  • 自己做視頻網(wǎng)站資源從哪里來重慶seo網(wǎng)頁優(yōu)化
  • 商河網(wǎng)站建設(shè)友情鏈接交換群
  • 商會(huì)網(wǎng)站建設(shè)seo優(yōu)化網(wǎng)絡(luò)公司排名
  • 佛山外包網(wǎng)站建設(shè)營銷案例100例小故事及感悟
  • 甌北網(wǎng)站制作報(bào)價(jià)山西seo優(yōu)化公司
  • 網(wǎng)站 線框圖seo搜論壇
  • 官方網(wǎng)站模板百度網(wǎng)盤電腦版下載