一、前言
對(duì)于并發(fā)編程而言,除了Thread以外,對(duì)Object對(duì)象的wati和notify對(duì)象也應(yīng)該深入了解其用法,雖然知識(shí)點(diǎn)不多。
二、線程安全基本知識(shí)
首先應(yīng)該記住以下基本點(diǎn),先背下來也無妨:
同一時(shí)間一個(gè)鎖只能被一個(gè)線程持有
調(diào)用對(duì)象的wait()和notify()前必須持有它
三、wait()和notify()理解
3.1 wait()和notify()方法簡(jiǎn)介
wait()和notify()都是Object的方法,可以認(rèn)為任意一個(gè)Object都是一種資源(或者資源的一個(gè)代表),當(dāng)多個(gè)線程對(duì)一個(gè)資源進(jìn)行操作時(shí),如果線程發(fā)現(xiàn)這個(gè)資源還沒有準(zhǔn)備好,它就可以在這個(gè)資源上進(jìn)行等待,即調(diào)用這個(gè)資源的wait()方法,如果有另外的線程經(jīng)過某些處理覺得這個(gè)資源可用了,會(huì)調(diào)用這個(gè)這個(gè)資源的notify()方法,告訴等待它的線程,這個(gè)資源可以用了。
當(dāng)然不使用wait()和notify()方法也是可以的,可以用while()死循環(huán)來判斷,如下面的偽代碼:
class Resource{ static boolean canUse=false; }while(!Resource.canUse){ //如果不可用,死循環(huán)在這里等待}//當(dāng)資源可以使用后,就會(huì)跳出循環(huán),往下執(zhí)行