zoukankan      html  css  js  c++  java
  • wait/notify 和 sleep 方法的异同

    相同点:
    它们都可以让线程阻塞。
    它们都可以响应 interrupt 中断:在等待的过程中如果收到中断信号,都可以进行响应,并抛出 InterruptedException 异常。


    不同点:
    wait 方法必须在 synchronized 保护的代码中使用,而 sleep 方法并没有这个要求。
    在同步代码中执行 sleep 方法时,并不会释放 monitor 锁,但执行 wait 方法时会主动释放 monitor 锁。
    sleep 方法中会要求必须定义一个时间,时间到期后会主动恢复,而对于没有参数的 wait 方法而言,意味着永久等待,直到被中断或被唤醒才能恢复,它并不会主动恢复。
    wait/notify 是 Object 类的方法,而 sleep 是 Thread 类的方法。

    synchronized的用法:

    public void give(String data) {
       synchronized (this) {
          buffer.add(data);
          notify();
       }
    }
     
    public String take() throws InterruptedException {
       synchronized (this) {
        while (buffer.isEmpty()) {
             wait();
        }
         return buffer.remove();
       }
    }

    ref:

    拉勾课程  徐隆曦   《Java 并发编程 78 讲》

  • 相关阅读:
    意向锁
    锁升级
    使用SQL SERVER PROFILER 捕获和分析死锁
    用Go写一个聊天软件
    Js中的一个日期处理格式化函数
    javascript format 字符串 函数
    php 读取excel 时间列
    PHP发送post请求
    javascript getElementsByClassName扩展函数
    [ASP.NET] Session 详解
  • 原文地址:https://www.cnblogs.com/zgq25302111/p/13197392.html
Copyright © 2011-2022 走看看