如何用Java實(shí)現(xiàn)跨線程通信?
如何用Java實(shí)現(xiàn)跨線程通信?synchronized關(guān)鍵字用于實(shí)現(xiàn)線程間的通信。這種方式本質(zhì)上是“共享內(nèi)存”通信。多個(gè)線程需要訪問(wèn)同一個(gè)共享變量。誰(shuí)拿到鎖誰(shuí)就可以執(zhí)行。如果線程a改變了條件,線程B會(huì)
如何用Java實(shí)現(xiàn)跨線程通信?
synchronized關(guān)鍵字用于實(shí)現(xiàn)線程間的通信。
這種方式本質(zhì)上是“共享內(nèi)存”通信。多個(gè)線程需要訪問(wèn)同一個(gè)共享變量。誰(shuí)拿到鎖誰(shuí)就可以執(zhí)行。
如果線程a改變了條件,線程B會(huì)通過(guò)while語(yǔ)句不斷檢查條件是否為真,從而實(shí)現(xiàn)線程間的通信。但是這種方法會(huì)浪費(fèi)CPU資源。您可以參考以下示例:
wait()方法可以使線程進(jìn)入等待狀態(tài),notify()方法可以使等待狀態(tài)喚醒。這種同步機(jī)制非常適合生產(chǎn)者和消費(fèi)者模式:消費(fèi)者消費(fèi)資源,生產(chǎn)者生產(chǎn)資源。當(dāng)資源丟失時(shí),使用者調(diào)用wait()方法自阻塞并等待生產(chǎn)者的產(chǎn)品。生產(chǎn)者完成后,調(diào)用notify/notifyAll()來(lái)喚醒消費(fèi)者進(jìn)行消費(fèi)。
使用管道通信java.io.PipedInputStream文件& ampjava.io.PipedOutputStream前兩個(gè)是面向字節(jié)的,后兩個(gè)是面向字符的。您可以參考下面的例子:
學(xué)了java能做什么實(shí)際的東西?
學(xué)習(xí)Java之后,您可以做很多實(shí)際的事情,主要取決于您的興趣。如果你喜歡手機(jī)開(kāi)發(fā),你可以做一個(gè)手機(jī)操作系統(tǒng),因?yàn)锳ndroid是用Java開(kāi)發(fā)的。如果你想涉足金融行業(yè),你可以為銀行或投資機(jī)構(gòu)建立他們的交易系統(tǒng),因?yàn)楦呤?、華旗集團(tuán)等使用的交易系統(tǒng)都是用Java開(kāi)發(fā)的。如果你喜歡游戲,可以參考桌面版的minecraft開(kāi)發(fā)一套游戲;也可以再造一個(gè)阿里巴巴。我聽(tīng)說(shuō)它們主要是Java棧。
所以,不要糾結(jié)于這個(gè)問(wèn)題,只要努力學(xué)習(xí)。會(huì)有個(gè)地方給你的!