线程常用方法总结

线程方法

  1. sleep(0),本地方法,线程停止执行一段时间,不会释放锁。睡眠后,线程的状态依然是TIMED-WAITING状态
  2. wait() => wait(0) ,本地方法, 将线程放入当前对象的等待池中,超过等待时间,则将线程放入对象的锁标志等待池中,等待notify() 和 notifyAll() 方法将线程放入对象的锁标志等待池中。 以上方法只能放在synchronized块中。
  3. join() => join(0) ,java方法,在A线程中调用B.join(),使用的是方法B的join(0)方法,底层还是A线程调用的B.wait(0),for循环当前线程isAlive():: 本地方法::,如果当前线程执行完成,则继续A方法的执行。其中B.wait(0),表示将需要将B放入对象的所标志等待池中,这样能防止多线程中,b没有获取锁,但是执行了。
  4. yeild() ,本地方法,不会释放锁,主要的作用是让出CPU时间,让其他线程执行,使用前需要经过详细的测试,确保功能满足要求。可能线程yield()后,会继续被执行。个人理解作用:感觉yield() 是 sleep()无参的结果,只是为了让线程让出CPU资源,一般是放在while循环中,让线程等会再来问,源码中也提示使用需要经过详细的测试
  5. stop(), java 方法,一般是为了将该线程拥有的锁全部释放掉,直接杀死线程,存在的问题是,该方法杀死线程,发生在任何情况下,不会有任何的提示,你可能在很久以后才发现线程被杀死了。::为什么不在杀死线程时提示ThreadDeath exception::
    • 发生在任何情况下,所拥有的资源都需要考虑到,逻辑过于复杂
    • 可能发生多次,甚至在cleanUp中,该逻辑可能会执行多次,直到cleanUp::底层执行::成功,通过代码保证,逻辑复杂
  6. suspend()、resume()挂起线程和恢复线程,java方法,废弃,因为当一个线程挂起时,不会释放资源,如果另一个线程恢复resume,但是又需要挂起线程的资源,则会引起死锁,应该使用wait和sleep替换

线程状态

  1. block 状态和wait状态的区别,block 状态表示等待锁,wait 状态表示等待被唤醒,由于wait()会释放锁,如果锁被其他线程获取,该线程还是会进入block状态去等待锁,但是两个等待锁的队列是不同的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值