wait()能让同步的线程挂起并将锁抛出,sleep只能使线程“睡了“,线程的锁并不会抛出,所以sleep还可以作用于非同步的线程。notify与notifyall能将被挂起或睡着的线程唤醒,但并不是将所有的的线程都唤醒,notifyall也不行,只能唤醒调用notify的这个对象里所引用的wait或sleep,毕竟java是面向对象的语言不难理解。