前些天,在凱通軟件的JavaEE筆試中碰到了這么一題——為什么wait()、notify()要和synchronized一起使用?
當時(shí)不會(huì )寫(xiě),隨便瞎扯了幾句,后來(lái)在網(wǎng)上搜了一下,發(fā)現關(guān)于這個(gè)問(wèn)題的解答很少——至少我沒(méi)找到,于是把對于線(xiàn)程方面的知識又粗略的看了一下,后來(lái)大致總結如下: synchronized是為了解決同步問(wèn)題的,而遇到“生產(chǎn)者-消費者”模型時(shí)就要用到wait()、notify()來(lái)一起解決。
至于筆試題的解答,大致可以理解為:因為wait的作用是通知當前線(xiàn)程等待并釋放對象鎖,notify的作用是通知等待此對象鎖的線(xiàn)程重新獲得對象鎖,然而,如果沒(méi)有獲得對象鎖,wait方法和notify方法都是沒(méi)有意義的,即必須要先獲得對象鎖才能對對象鎖進(jìn)行操作,于是,才必須把wait方法和notify方法寫(xiě)到synchronized方法或是synchronized塊中了
聯(lián)系客服