非常感謝你的閱讀,如果你覺得好或者對(duì)你有幫助,請(qǐng)積極給一個(gè)留言反饋以示鼓勵(lì)。?
多線程常用的一些方法: wait(),wait(long),notify(),notifyAll()等
這些方法是當(dāng)前類的實(shí)例方法,
wait()????? 是使持有對(duì)象鎖的線程釋放鎖;
wait(long)是使持有對(duì)象鎖的線程釋放鎖時(shí)間為long(毫秒)后,再次獲得鎖,wait()和wait(0)等價(jià);
notify()??? 是喚醒一個(gè)正在等待該對(duì)象鎖的線程,如果等待的線程不止一個(gè),那么被喚醒的線程由jvm確定;
notifyAll? 是喚醒所有正在等待該對(duì)象鎖的線程.
并且應(yīng)該優(yōu)先使用notifyAll()方法,因?yàn)閱拘阉芯€程比喚醒一個(gè)線程更容易讓jvm找到最適合被喚醒的線程.
對(duì)于上述方法,
只有在當(dāng)前線程中才能使用,否則報(bào)運(yùn)行時(shí)錯(cuò)誤java.lang.IllegalMonitorStateException:?current?thread?not?owner.
從實(shí)現(xiàn)角度來分析:
在線程調(diào)用wait()方法時(shí),需要把它放到一個(gè)同步段里,即應(yīng)該在調(diào)用前使用
1
synchroed(this)
{
2
??thread.wait();
3
??

4
}
5
否則將會(huì)出現(xiàn)"java.lang.IllegalMonitorStateException: current thread not owner"的異常。
Thanks very much to visit blog,? welcome your feedback,? your feedback is the Driver && Power to me