栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

线程中常用的几个方法sleep, yield,join,wait,notify,notifyAll

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线程中常用的几个方法sleep, yield,join,wait,notify,notifyAll

static native void sleep(long millis):
  • 1.sleep方法是Thread类的一个静态方法,使当前线程休眠,进入阻塞状态(暂停执行),如果线程在睡眠状态被中断,将会抛出IterruptedException中断异常
  • 2.调用sleep方法会让当前线程从Running进入TimedWaiting状态
  • 3.睡眠结束后的线程未必会立刻得到执行,因为此时cpu可能正在执行其他线程的代码,等任务调度器把新的时间片分给该线程以后,该线程才能继续运行(sleep时间达到后,线程进入就绪状态)
  • 4.建议用TimeUnit的sleep代替Thread的sleep来获得更好的可读性,因为它为时间提供了单位,如:TimeUnit.SECONDS.sleep(1); //表示睡眠1秒
  • 5.每一个对象都有一个锁,sleep不会释放锁,当前线程会占据资源,使其他线程也不能使用资源,直到时间结束后,才可以继续运行
sleep方法的应用
  • 防止CPU占用100%
static native void yield():
  • 1.yield方法是Thread类的一个静态方法,会让当前正在执行的线程暂停,注意不是阻塞线程
  • 2.调用yield会让当前线程从运行态变为就绪态,进入就绪队列,然后调度执行其他线程
  • 3.具体的实现依赖于操作系统的任务调度器
  • 4.礼让后,其他线程是可以继续使用资源的
  • 5.礼让不是每次都一定成功,礼让有可能失败
join方法:
  • final void join():等待线程运行结束
  • final synchronized void join(long millis, int nanos):
  • final synchronized void join(long millis):等待线程运行结束,最多等待millis毫秒
  • 插队,等待这个线程死亡(如果某个线程调用了这个方法, 那么其它的线程必须等待这个线程执行完毕才有机会执行),此时其它的线程阻塞
  • 对于带时间参数的join方法,如果在等待时间结束后线程还没有运行完毕,那么当前插队的线程就会结束运行
同步和异步
  • 以调用方角度来讲,如果:
    • 如果一个线程需要等待另一个线程结果返回,才能继续运行就是同步
    • 如果一个线程不需要等待另一个线程结果返回,就能继续运行就是同步
interrupt方法
  • interrupt方法会打断sleep,wait,join的线程,这三个方法都会抛出InterruptException异常(属于checkedException)

  • interrupt方法也会打断正在运行的线程

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/293323.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号