notify()、notifyAll()、wait()方法
都是Object类中的方法,而且都被定义为native final的,因此不可以被重写,并且这三个方法都只能在同步代码块或者方法中使用
1、wait():
调用某个对象的wait方法可以使当前线程
立即进入阻塞状态而不继续往下执行代码,前提是
此线程必须拥有此对象的锁。
2、notify():
调用某个对象的的notify方法可以唤醒一个正在等待此对象的锁的线程
,但是不立即释放锁,而是执行完synchronize包含的所有代码,再释放锁
,如果有多个线程在等待此对象的锁,则只能唤醒他们中的一个。
3、、notifyAll():调用某个对象的notifyAll方法,可以唤醒所有在等待此对象锁的线程。
当调用某个对象的notify或者是notifyAll方法,可以唤醒一个或者多个等待此对象的锁的线程,但并不是立刻释放锁,而是当此线程执行完这个同步代码块或者方法后,才会释放锁。其他等待此对象的线程中的一个线程才有机会获得到锁。
sleep(long millis)、join()、yield()方法
:
1、sleep(long millis) 表示当前线程休眠long millis的时间,并且当前线程如果占有synchronized锁时,不会释放synchronized锁。
2、join()方法其实是基于wait方法实现的,因此在调用join 方法时,将和wait方法一样释放锁。
3、yield()方法:
yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行,yield()只能使同优先级或更高优先级的线程有执行的机会。