美文网首页
sleep和wait的区别

sleep和wait的区别

作者: 山不转人自转 | 来源:发表于2020-11-10 20:30 被阅读0次

总结以下四点:

1、sleep是Thread中的方法,而wait方法是Object中的方法(即任何对象都能调用wait方法)。

2、sleep方法不会释放锁,而wait方法会释放锁,且加入到等待队列中,直到被唤醒,或者通过设定时间 到达指定时间后线程处于空闲状态则可以立马获取到。

3、sleep方法不依赖于同步器synchronized,但是wait方法需要依赖synchronized关键字。

没有上锁报了这个错误
也就是当前的线程不是此对象监视器的所有者。没有获取到锁对象,就是说这里需要用到同步锁synchronized关键字上锁,否则就会报IllegalMonitorStateException异常。
“问:为什么只能用在同步锁synchronized代码块中使用?”

4、sleep不需要被唤醒(休眠之后继续执行),但是wait需要,如果没有设定毫秒值,则需要等待有线程调用notify()或者notifyAll() 才能使其竞争锁 负责就是死锁了。

sleep没什么好讲的,唯一好处就是可以在任何地方使用,但是要捕获异常。

解答:

1.首先,要明白,每个对象都可以被认为是一个"监视器monitor",这个监视器由三部分组成(一个独占锁,一个入口队列,一个等待队列)。注意是一个对象只能有一个独占锁,但是任意线程都可以拥有这个独占锁。

2.对于对象的非同步方法而言,任意时刻可以有任意个线程调用该方法。

3.对于对象的同步方法而言,只有拥有这个对象的独占锁才能调用这个同步方法。如果这个独占锁被其他线程占用,那么另外一个调用该同步方法的线程就会处于阻塞状态,此线程进入入口队列,就好比先前说的如果线程不是空闲状态其他线程只能等待,并不能竞争锁。

4.若一个拥有该独占锁的线程调用该对象同步方法的wait()方法,则该线程会释放独占锁,并加入对象的等待队列;

5.则某个线程调用notify(),notifyAll()方法是将等待队列的线程转移到入口队列,然后让他们竞争锁,所以这个调用线程本身必须拥有锁。

Synchronized应用举例:生产者消费者模型

消费者线程需要等待直到生产者线程完成一次写入操作。生产者线程需要等待消费者线程完成一次读取操作。假设没有应用Synchronized关键字,当消费者线程执行wait操作的同时,生产者线程执行notify,生产者线程可能在等待队列中找不到消费者线程。导致消费者线程一直处于阻塞状态。那么这个模型就要失败了。所以必须要加Synchronized关键字。

相关文章

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

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

  • sleep和wait区别以及while死循环

    sleep()和wait()区别 sleep()和wait()的区别属于老生常谈了,大部分Java面试或者笔试都会...

  • sleep() wait() 区别

    sleep() wait() 区别 wait()和sleep()最大的不同在于:wait()会释放对象锁,而sle...

  • 线程——wait和sleep

    wait()和sleep()的区别 sleep(): 1、sleep()是Thread类的方法; 2、sleep(...

  • 面试相关之 Java 并发

    1. sleep()和wait()的区别?参考回答:sleep()来自Thread类;wait()来自Object...

  • 线程考点

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

  • Java多线程

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

  • 【进阶】 wait sleep

    wait sleep 区别 不同: wait会释放锁,而sleep不会释放锁 wait只能在同步方法和同步代码块中...

  • java sleep和wait相关知识汇总

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

  • 解答

    Java sleep 和wait区别sleep 休眠让出CUP,不改变锁的状态wait 让出CUP,也将锁让出

网友评论

      本文标题:sleep和wait的区别

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