美文网首页
Java中Thread类的sleep和wait方法有什么区别?

Java中Thread类的sleep和wait方法有什么区别?

作者: iflymoon | 来源:发表于2018-03-01 17:04 被阅读260次

在Java中sleep和wait这两个方法都可以用来进行线程控制,但是它们在使用上有什么区别呢?

本质区别

首先,要记住这个差别,“sleep是Thread类的方法,wait是Object类中定义的方法”。尽管这两个方法都会影响线程的执行行为,但是本质上是有区别的。

锁行为区别

sleep方法是线程类Thread的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争cpu的执行时间。因为sleep是Thread的静态方法,他不能改变对象的锁,当一个synchronized块中调用了sleep() 方法,线程虽然进入休眠,但是对象的锁没有被释放,其他线程依然无法访问这个对象。
wait是Object类的方法,当一个线程执行到wait方法时,它就进入到一个和该对象相关的等待池,同时释放对象的锁,使得其他线程能够访问,可以通过notify、notifyAll方法来唤醒等待的线程。

使用范围区别

wait、notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用,例如:

synchronized(object){
     object.notify()
     //object.wait()
}

异常捕获区别

sleep必须捕获异常,而wait、notify和notifyAll不需要捕获异常,例如:

try {
  Thread.sleep(1000);
} catch (InterruptedException e) {
  e.printStackTrace();
}

相关文章

  • java sleep和wait相关知识汇总

    java sleep和wait的区别? sleep是Thread类的方法,wait是Object类中的方法,尽管这...

  • Java多线程

    Java中的sleep()和wait()的区别 sleep属于Thread类的静态方法。而wait()方法,则是属...

  • Java中wait和sleep方法有什么区别?

    参考Java中wait和sleep方法的区别java中的 sleep() 和 wait() 有什么区别? wait...

  • JAVA总结(三)

    Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别? sleep()方...

  • 线程提问的点

    Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别? sleep()方...

  • 线程考点

    1、sleep和wait的区别 sleep是Thread类的方法、wait是Object类中定义的方法sleep方...

  • Java知识点总结基础篇51-53

    五十一、sleep()和wait()有什么区别 Sleep是线程类(Thread)的方法,导致此线程暂停执行指定时...

  • Java基础之多线程

    1.Thread线程 线程中start和run方法有什么区别?wait和sleep方法的不同?sleep() 、j...

  • 浅谈Java 线程阻塞及导致原理

    解析Java Thread 类方法 sleep() suspend() resume() yield() wait...

  • JAVA线程sleep和wait方法区别

    JAVA线程sleep和wait方法区别 一 sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时...

网友评论

      本文标题:Java中Thread类的sleep和wait方法有什么区别?

      本文链接:https://www.haomeiwen.com/subject/euogxftx.html