java sleep join_JAVA线程中sleep、 join、 yield、 wait区别

sleep()方法

为java的原生方法,执行sleep的线程会休眠直到指定时间,然后重新排队获取cpu资源(休眠后被唤醒后重新回到就绪状态排队);在休眠期间,该线程的锁不会释放

join()方法

join()方法表示 在A线程中调用B.join()方法时,A线程进入等待;join方法内部其实是使用java本地方法wait();join()方法其实就是调用Thread方法类的带参数的join方法;wait(0)相当于wait(),无限等待,直到notify,notifyall方法唤醒该线程;

06b9e6d12d783de7ed68f334a05a6dc4.png

不带参数的join方法

java sleep join_JAVA线程中sleep、 join、 yield、 wait区别_第1张图片

带参数的join方法

yield方法

yield方法为Thread静态原生方法,他不能指定时间,调用yield方法,会建议cpu按优先级高的线程优先执行,多部分会按优先级高的线程优先执行,但也有例外,所以只能说建议。优先级从1到10,10为最高优先级;

wait()方法和notify()、notifyAll()

该三个方法是Object类的方法,用于协助多线程下的共享资源的存取,必须在synchronized代码块里面才能起作用。wait()方法会释放所有资源和锁,让出给其他线程使用,等待notify和notifyAll唤醒。另外对于synchronized需要有个锁,该锁可以是类锁,对象锁,也就是Object的子类或对象都可以,但不能是基本类型,包括Boolean,boolean,Integer,int等类型,否则会报IllegalMonitorStateException异常

参考:

http://www.jianshu.com/p/c9f847101fae

你可能感兴趣的:(java,sleep,join)