锁定义在object类,而不是Thread类
wait(), notify() synchronized会对锁进行操作,wait()使当前线程等待,释放所持有的锁,通过notify()唤醒其他的等待线程,是谁唤醒他们的呢?是“唤醒线程”,它只有获得操作对象的锁,才能去唤醒等待线程,此时等待线程还不能运行,这就需要唤醒线程释放持有的锁,其他线程才能获得锁去执行。wait(),notify()依赖锁,而锁是对象持有的,而对象有且只有一个。
wait(), notify(), notifyAll()
wait()会释放锁
join()
打断当前正在运行的线程,运行join的线程,不会释放锁,直到运行完毕或到时间
sleep(), yield()
都不会释放锁。
sleep会使当前线程休眠,放弃当前的cpu时间片,直至到时间
yield会使当前线程让步,放弃当前cpu时间片,OS重新选择线程,不保证“一定让出”,所有线程同时抢