美文网首页
关于sleep()和wait()

关于sleep()和wait()

作者: rollAway | 来源:发表于2016-07-17 11:30 被阅读27次

Java中的多线程是一种抢占式的机制,而不是分时机制。抢占式的机制是有多个线程处于可运行状态,但是只有一个线程在运行。

共同点:##

1.

他们都是在多线程的环境下,都可以在程序的调用处阻塞指定的毫秒数,并返回。

2.

wait()和sleep()都可以通过interrupt()方法 打断线程的暂停状态 ,从而使线程立刻抛出InterruptedException。 如果线程A希望立即结束线程B,则可以对线程B对应的Thread实例调用interrupt方法。如果此刻线程B正在wait/sleep/join,则线程B会立刻抛出InterruptedException,在catch() {} 中直接return即可安全地结束线程。 需要注意的是,InterruptedException是线程自己从内部抛出的,并不是interrupt()方法抛出的。对某一线程调用 interrupt()时,如果该线程正在执行普通的代码,那么该线程根本就不会抛出InterruptedException。但是,一旦该线程进入到 wait()/sleep()/join()后,就会立刻抛出InterruptedException 。

不同点:##

1.

每个对象都有一个锁来控制同步访问。Synchronized关键字可以和对象的锁交互,来实现线程的同步。 sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

2.

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

3.

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

4.

sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

5.

wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

相关文章

  • 关于sleep()和wait()

    Java中的多线程是一种抢占式的机制,而不是分时机制。抢占式的机制是有多个线程处于可运行状态,但是只有一个线程在运...

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

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

  • sleep() wait() 区别

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

  • 线程考点

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

  • 面试相关之 Java 并发

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

  • 线程——wait和sleep

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

  • 【进阶】 wait sleep

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

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

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

  • wait和sleep的区别

    首先确定下wait和sleep的属于的对象,wait属于Object,sleep属于Thread。 线程调用sle...

  • Java多线程

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

网友评论

      本文标题:关于sleep()和wait()

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