java非同步呼叫理解

2021-08-26 13:01:51 字數 1199 閱讀 1085

下面來看看蛋糕師傅是怎麼做蛋糕的:

建立乙個字串,包含count個c字元,為了表現出犯法需要花費一些時間,使用了sleep。

public class realdata implements data catch (interruptedexception e)

}system.out.println("****** realdata(" + count + ", " + c + ") end");

this.content = new string(buffer);

}public string getcontent()

}現在來看看「提貨單」future是怎麼與蛋糕"content"對應的:

public class futuredata implements data

this.realdata = realdata;

this.ready = true;

notifyall();

}public synchronized string getcontent() catch (interruptedexception e)

}return realdata.getcontent();}}

顧客做完自己的事情後,會拿著自己的「提貨單」來取蛋糕:

system.out.println("data1 = " + data1.getcontent());

這時候如果蛋糕沒做好,就只好等了:

while (!ready) catch (interruptedexception e)

//等做好後才能取到

return realdata.getcontent();

程式分析

對於每個請求,host都會生成乙個執行緒,這個執行緒負責生成顧客需要的「蛋糕」。在等待一段時間以後,如果蛋糕還沒有做好,顧客還必須等待。直到「蛋糕被做好」,也就是

future.setrealdata(realdata); 執行以後,顧客才能拿走蛋糕。

每個執行緒只是專門負責製作特定顧客所需要的「蛋糕」。也就是顧客a對應著蛋糕師傅a,顧客b對應著蛋糕師傅b。即使顧客b的蛋糕被先做好了,顧客a也只能等待蛋糕師傅a把蛋糕做好。換句話說,顧客之間沒有競爭關係。

類futuredata的兩個方法被設定為synchronized,實際上蛋糕師傅a與顧客a之間的互斥關係,也就是顧客a必須等待蛋糕師傅a把蛋糕做好後,才能拿走,而與蛋糕師傅b是否做好了蛋糕沒有關係。

java 非同步呼叫

業務要求流程流轉與資料記錄 插表 非同步進行 使用執行緒池實現非同步呼叫 1.執行緒池配置 name esg.taskexecutor class org.springframework.scheduling.concurrent.threadpooltaskexecutor name corepo...

同步呼叫與非同步呼叫

一 什麼是同步呼叫與非同步呼叫 定義 1 同步就是整個處理過程順序執行,當各個過程都執行完畢,並返回結果。2 非同步呼叫則是只是傳送了呼叫的指令,呼叫者無需等待被呼叫的方法完全執行完畢 而是繼續執行下面的流程。例如,在某個呼叫中,需要順序呼叫 a,b,c三個過程方法 如他們都是同步呼叫,則需要將他們...

JAVA多執行緒實現非同步呼叫

時間 只需要領個提貨單就可以了 去幹別的事情 等到蛋糕做好了,再拿提貨單取蛋糕就可以了。package com.somnus async description 顧客 date 2016年3月9日 下午7 20 41 version 1.0 public class customer catch i...