sleep()
,yield()
,join()
,wait()
sleep()
sleep是Thread
类的静态方法,在指定的时间内让当前线程暂停执行,但不会释放锁标志
也就是使线程进入阻塞状态
wait()
Object类的方法,在其他的线程调用notify()/notifyAll()
之前,当前线程保持 等待,会释放锁标志,其他线程可以在当前线程wait期间抢占锁。让线程进入等待(阻塞)状态
wait与notify必须在synchronized函数中或者synchronized代码块中使用,其他地方的使用虽然编译不会出错,但是会抛出异常。
yield()
yield只是让当前的线程‘放弃cpu资源,但是放弃的时间不确定,有可能放弃之后又获得了cpu资源。也就是,让线程再次进入可执行状态,yield只能使得同优先级或者优先级更高的线程获得执行的可能
yield不会释放锁
join()
在一般情况下,往往主线程会先于其他线程执行结束。但是有时候主线程需要等待其他线程的执行结果,这时候就可以使用join()
方法来让主线程暂停执行,先执行其他线程,直到其他线程执行完毕,主线程才会接着执行。
也就是使得主线程阻塞,让调用join()
的线程先执行。还有一个join(long waitTime)
,可以使当前线程只阻塞 wait time 毫秒的时间。当调用join()
方法的线程被中断的时候,程序会抛出异常
join(long time)
的内部实现是使用的wait(long time)
实现的,所以,在同步的代码中,会释放锁。