suspend() 和 resume() 方法:两个方法配套使用,suspend()使得线程进入阻塞状态,并且不会自动恢复,必须其对应的 resume() 被调用,才能使得线程重新进入可执行状态。但suspend()方法阻塞时都不会释放占用的锁,很容易引起死锁问题, 已经不推荐使用了。
wait() 和 notify() 方法:两个方法配套使用,wait() 使得线程进入阻塞状态,它有两种形式,一种允许 指定以毫秒为单位 的一段时间作为参数,另一种没有参数,前者当对应的 notify() 被调用或者超出指定时间时线程重新进入可执行状态,后者则必须对应 的 notify() 被调用。用wait/notify/notifyAll来同步的,它们之间的调用必须是有序进行,必须要先wait调用成功才能notify,而且使用notify只能唤醒一个线程,一般使用notifyAll方法。
unpark() 和 park() 方法:unpark函数为线程提供“许可(permit)”,线程调用park函数则等待“许可”,但“许可”是一次性的。unpark函数能够先于park调用,无时序限制,但同样不会释放占用的锁。