`sleep()`,`yield()`,`join()`,`wait()`

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)实现的,所以,在同步的代码中,会释放锁

猜你喜欢

转载自www.cnblogs.com/GaryZz/p/11123101.html