因?yàn)镴ava所有類(lèi)的都繼承了Object,Java想讓任何對(duì)象都可以作為鎖,并且 wait(),notify()等方法用于等待對(duì)象的鎖或者喚醒線(xiàn)程,在 Java 的線(xiàn)程中并沒(méi)有可供任何對(duì)象使用的鎖,所以任意對(duì)象調(diào)用方法一定定義在Object類(lèi)中。
有的人會(huì)說(shuō),既然是線(xiàn)程放棄對(duì)象鎖,那也可以把wait()定義在Thread類(lèi)里面啊,新定義的線(xiàn)程繼承于Thread類(lèi),也不需要重新定義wait()方法的實(shí)現(xiàn)。然而,這樣做有一個(gè)非常大的問(wèn)題,一個(gè)線(xiàn)程完全可以持有很多鎖,你一個(gè)線(xiàn)程放棄鎖的時(shí)候,到底要放棄哪個(gè)鎖?當(dāng)然了,這種設(shè)計(jì)并不是不能實(shí)現(xiàn),只是管理起來(lái)更加復(fù)雜。