精华内容
下载资源
问答
  • wait和sleep区别

    2021-04-01 10:58:10
    wait和sleep方法均是可中断方法,被中断后都会收到中断异常。 wait是Object的方法,而sleep是Thread特有的方法。 wait方法的执行必须在同步方法中进行,而sleep则不需要。 线程在同步方法中执行sleep方法时,并不会...

    1 sleep和wait区别

    从表面上看,wait和sleep方法都可以使当前线程进入阻塞状态,但是两者之间存在着本质的区别:

    • wait和sleep方法都可以使线程进入阻塞状态。
    • wait和sleep方法均是可中断方法,被中断后都会收到中断异常。
    • wait是Object的方法,而sleep是Thread特有的方法。
    • wait方法的执行必须在同步方法中进行,而sleep则不需要。
    • 线程在同步方法中执行sleep方法时,并不会释放monitor的锁,而wait方法则会释放monitor的锁,并且将线程添加到该对象监视器(monitor)的等待队列中
    • sleep方法短暂休眠之后会主动退出阻塞,而wait方法(没有指定wait时间)则需要被其他线程中断后才能退出阻塞。
    • sleep不需要被唤醒,但是wait是需要唤醒的
    public class DifferenceOfWaitAndSleep {
    
        private final static Object LOCK = new Object();
    
        public static void main(String[] args) {
            // m1();
            //m2();
            m3();
        }
    
    
        public static void m1() {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
        // 这里没有加锁,运行,就会抛出一个异常IllegalMonitorStateException
        public static void m2() {
            try {
                LOCK.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
        // 这里加锁,运行,就不会抛出一个异常IllegalMonitorStateException
        public static void m3() {
            synchronized (LOCK){
                try {
                    LOCK.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    
    展开全文
  • wait和sleep的区别

    2020-06-11 10:10:22
    2.wait和sleep方法均是可中断方法,被中断后都会受到中断异常 3.wait使Object的方法,而sleep是Thead特有的方法 4.wait方法的执行必须在同步方法中进行,而sleep则不需要 5.线程在同步方法中执行sleep方法时,并...
    1.wait和sleep方法都可以使线程进入阻塞状态
    
    2.wait和sleep方法均是可中断方法,被中断后都会受到中断异常
    
    3.wait使Object的方法,而sleep是Thead特有的方法
    
    4.wait方法的执行必须在同步方法中进行,而sleep则不需要
    
    5.线程在同步方法中执行sleep方法时,并不会释放monitor的锁,
    而wait方法则会释放monitor的锁
    
    6.sleep方法短暂休眠之后会主动退出阻塞,
    而wait方法(没有指定时间)则需要被其他线程中断后才能退出阻塞
    
    展开全文
  • Java程序中wait sleep都会造成某种形式的暂停,它们可以满足不同的需要。 1 wait()方法用于线程间通信,如果等待条件为真且其它线程被唤醒时它会释放锁, 2 sleep()方法仅仅释放CPU资源或者让当前线程停止执行...

    Java程序中wait 和 sleep都会造成某种形式的暂停,它们可以满足不同的需要。

    1 wait()方法用于线程间通信,如果等待条件为真且其它线程被唤醒时它会释放锁,

    2 sleep()方法仅仅释放CPU资源或者让当前线程停止执行一段时间,但不会释放锁

    展开全文
  • Wait和sleep的区别

    2018-02-22 14:40:36
    Thread.sleep不会导致锁行为的改变,如果当前线程是拥有锁的,那么Thread.sleep不会让线程释放锁。如果能够帮助你记忆的话,可以简单认为锁相关的方法都定义在Object类中,因此调用Thread.sleep是不会影响锁的


    首先,要记住这个差别,“sleep是Thread类的方法,wait是Object类中定义的方法”。尽管这两个方法都会影响线程的执行行为,但是本质上是有区别的。
    Thread.sleep不会导致锁行为的改变,如果当前线程是拥有锁的,那么Thread.sleep不会让线程释放锁。如果能够帮助你记忆的话,可以简单认为和锁相关的方法都定义在Object类中,因此调用Thread.sleep是不会影响锁的相关行为。
    Thread.sleep和Object.wait都会暂停当前的线程,对于CPU资源来说,不管是哪种方式暂停的线程,都表示它暂时不再需要CPU的执行时间。OS会将执行时间分配给其它线程。区别是,调用wait后,需要别的线程执行notify/notifyAll才能够重新获得CPU执行时间。线程的状态参考 Thread.State的定义。新创建的但是没有执行(还没有调用start())的线程处于“就绪”,或者说Thread.State.NEW状态。Thread.State.BLOCKED(阻塞)表示线程正在获取锁时,因为锁不能获取到而被迫暂停执行下面的指令,一直等到这个锁被别的线程释放。BLOCKED状态下线程,OS调度机制需要决定下一个能够获取锁的线程是哪个,这种情况下,就是产生锁的争用,无论如何这都是很耗时的操作。


    一张图让你明白:

    sleep 让线程从 【running】 -> 【阻塞态】 时间结束/interrupt -> 【runnable】
    wait 让线程从 【running】 -> 【等待队列】notify -> 【锁池】 -> 【runnable】



    展开全文
  • wait和sleep方法均是可中断方法,被中断后都会收到中断异常。 wait是Objcct的方法,而sleep是Thread特有的方法。 wait方法的执行必须在同步方法中进行,而sleep则不需要。 线程在同步方法中执行sleep方法时,并不会...
  • Java wait和sleep的异同

    2018-04-17 09:47:48
    Thread.sleep不会导致锁行为的改变,如果当前线程是拥有锁的,那么Thread.sleep不会让线程释放锁。如果能够帮助你记忆的话,可以简单认为锁相关的方法都定义在Object类中,因此调用Thread.sleep是不会影响锁的相关...
  • wait方法和sleep方法的区别

    千次阅读 2018-09-16 15:25:00
    Thread.sleep不会导致锁行为的改变,如果当前线程是拥有锁的,那么Thread.sleep不会让线程释放锁。如果能够帮助你记忆的话,可以简单认为锁相关的方法都定义在Object类中,因此调用Thread.sleep是不会影响锁的相关...
  • sleep和wait的区别

    2020-08-04 10:01:06
    sleep和wait的区别: 1、sleep是Thread的静态方法,wait是Object的方法,任何对象实例都能调用。 2、sleep不会释放锁,它也不需要占用锁。wait释放锁,但调用它的前提是当前线程占有锁(即代码要在synchronized中)...
  • 这是我的第一篇博客。 Java线程中sleep和wait的区别 不同点 1. sleep不会释放锁wait释放锁 ...1. sleep和wait都会导致线程的阻塞,阻塞状态结束后,进入就绪状态时,都是从断点处继续往下执行...
  • sleep和wait的区别?

    2019-03-11 22:01:00
    sleep是让线程休眠,wait是等待。...CPU及资源锁释放:sleep,wait调用后都会暂停当前线程并让出cpu的执行时间,但不同的是sleep不会释放当前持有的对象的资源,到时间后会继续执行,而wait会放弃...
  • Thread.sleep和Object.wait都会暂停当前的线程,让出cpu。Thread.sleep时间到了之后,线程可以被重新调度,但是线程被Object.wait暂停执行之后,必须要其它的线程notify或者notify_all唤醒。 Object.wait需要在获取...
  • wait和sleep区别 1.wait可以指定也可以不用指定时间, sleep必须指定时间 2.在同步中,对cpu的执行权释放不同 wait:释放执行权,释放锁; sleep:释放执行权,不释放锁; 1.首先,要记住这个差别,...
  • wait()和sleep()方法的本质区别

    千次阅读 2018-04-10 10:04:04
    Thread.sleep不会导致锁行为的改变,如果当前线程是拥有锁的,那么Thread.sleep不会让线程释放锁。如果能够帮助你记忆的话,可以简单认为锁相关的方法都定义在Object类中,因此调用Thread.sleep是不会影响锁的
  • Java中sleep和wait的区别

    2018-07-24 14:44:12
    sleep要放在trycatch中,wait要放入循环中 ...Thread.sleep和Object.wait都会暂停当前的线程,对于CPU资源来说,不管是哪种方式暂停的线程,都表示它暂时不再需要CPU的执行时间。OS会将执行时间分配给...
  • 第三点,执行wait方法会释放当前对象的锁的,但是sleep并不会释放锁 第四点,wait方法是用在同步方法中。也就是说,要使用wait方法,就必须先获得该对象(代码块,方法)的锁 相同点 两者都会让线程进入阻
  • 2.wait()执行后标识会被释放,使用场景是一些不满足条件的线程抢到后,为了让条件满足后再来让它执行,就调用这个方法。然后等条件满足后,再调用notify() notifyAll()让它活着它们苏醒...
  • Java多线程sleep和wait的区别

    千次阅读 2019-03-22 21:38:15
    我们都知道sleep是让线程休眠,到时间后会继续执行;wait是等待,需要唤醒再继续执行,那么这两种方法在多线程中的表现形态有什么不同? 使用方面: ...sleepwait调用后都会暂停当前线程并让出CPU的...
  • sleep()和wait()的区别

    2019-09-24 09:12:53
    2 Thread.sleep和Object.wait都会暂停当前的线程,对于CPU资源来说,不管是哪种方式暂停的线程,都表示它暂时不再需要CPU的执行时间。OS会将执行时间分配给其它线程。  Thread.sleep(),线程不会释放对象。当调用...
  • Thread.sleep不会导致锁行为的改变,如果当前线程是拥有锁的,那么Thread.sleep不会让线程释放锁。如果能够帮助你记忆的话,可以简单认为锁相关的方法都定义在Object类中,因此调用Thread.sleep是不会影响锁的...
  • sleep和wait

    2020-11-13 11:21:38
    **一句话:sleep和wait都会释放cpu,区别在于sleep释放锁wait释放锁。 ** sleep: ​ A线程调用sleep方法不会释放锁,所以其它A线程一起持有一把锁的A1、A2线程就不会执行,但是另外的线程不需要持有这把锁的...
  • wait&sleep wait释放锁,sleep不释放 wait是Object的方法,sleep是... wait和sleep被Interrupte都会有InterruptedException notify obj.notify()随机叫醒一个与obj对象锁相关的waitset中的一个线程 obj.notif
  • Thread.sleep不会导致锁行为的改变,如果当前线程是拥有锁的,那么Thread.sleep不会让线程释放锁。如果能够帮助你记忆的话,可以简单认为锁相关的方法都定义在Object类中,因此调用Thread.sleep是不会影响锁的相关...
  • 池所有需要竞争同步的线程都会放在池当中,比如当前对象的已经被其中一个线程得到,则其他线程需要在这个池进行等待,当前面的线程释放同步池中的线程去竞争同步,当某个线程得到后会进入就绪队列...
  • 所有需要竞争同步的线程都会放在池当中,如果当前对象的已经被其中一个线程得到,则其他线程需要在这个池进行等待,当之前的线程释放同步后,池中的所有线程都会去竞争同步,当某个线程得到后会进入...
  • 只有runnable到running时才会...sleep(long mills):让出CPU资源,但是不会释放锁资源。wait():让出CPU资源锁资源。 1.Thread.sleep(long) Thread.yield()都是Thread类的静态方法,在调用的时候都是Thread....

空空如也

空空如也

1 2 3
收藏数 47
精华内容 18
关键字:

wait和sleep都会释放锁