Java线程调度方法

Java线程同步和线程调度的相关方法

1)wait():调用后线程进入无限等待状态释放对象锁,进入等待队列。依靠notify()/notifyAll()唤醒或者wait(long timeout) timeout时间到自动唤醒。只能用在同步方法或者同步控制块中使用(synchronized);如果没有释放锁,那么其它线程就无法进入对象的同步方法或者同步控制块中,无法执行 notify() 或者 notifyAll() 来唤醒挂起的线程,造成死锁。

2)sleep():不会进入阻塞态不释放对象锁,苏醒后自动进入就绪态

3)notify():唤醒一个处于等待状态的线程,如果多个线程在等待,并不能确切的唤醒一个线程,JVM确定唤醒那个线程,与其优先级有关,释放锁让就绪状态中的线程竞争获取锁

4)notityAll():唤醒所有处于等待状态的线程,但是并不是将对象的锁给所有的线程,而是让它们去竞争,谁先获取到锁,谁先进入就绪状态。

5)Thread.yield(),当前线程放弃获取的CPU时间片,但不释放锁资源,由运行状态变为就绪状态,Thread.yield()不会导致阻塞.

6) thread.join()/join(long millis):当前线程里调用其它线程的join方法,当前线程进入等待态,不会释放对象锁,直到目标线程结束,使得t.join()中的t优先执行

sleep()和wait()有什么区别

1)类不同:sleep()是Thread下的静态方法,wait()是Object类下的方法

2)是否释放锁:sleep()不释放锁,wait()释放锁

3)用处不同:wait()只能在同步方法里,sleep()可在任何地方使用。

4)用法不同:wait()调用后,必须等待唤醒或者等待超时才能执行,sleep()方法调用后,线程经过过一定时间会自动苏醒

5)苏醒后区别因为wait会释放锁,所以苏醒后没有获取到锁就进入堵塞状态,获取到锁就进入就绪状态而sleep苏醒后之间进入就绪状态,但是如果cpu不空闲,则进入的是就绪状态的堵塞队列中

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值