zoukankan      html  css  js  c++  java
  • Java多线程中的wait与notify

    一、wait:

      1. wait 是 object 类的方法, sleep 是 thread 类的方法.

      2. 当前的正在我这个对象访问的线程 wait.

      3. 当前的这个线程, 锁定在当前对象的这个线程停止住.

      4. 只有锁定后, 才能有wait; 如果不是 synchronized, 直接调用 wait, 立马出错.

    二、锁的问题:

      1. 原来不是拥有这个对象的锁吗? 一旦 wait ,立马就死了, 这个对象的锁就不再归我所有, 只有醒过来的时候, 我才会再找这把锁, 把它找回来.

    三、wait 与 sleep 的区别:

      1. wait 的时候, 锁就不再给我所有.

      2. sleep 的时候, 睡着了也抱着那把锁, 它比较贪婪.

    四、notify:

      1. this.notify 叫醒一个现在正在 wait 在我这个对象上的线程, 谁现在正在我的这个对象上等待, 我就叫醒一个线程, 让它继续执行.

    五、wait 什么时候用:

      发生了一个阻塞事件, 已经满了, 这个时候我只能 wait, 而且我不知道我要 wait 多长时间. 所以就一睡不起, 什么时候我就醒了呢?

      当前对象有人调用了 notify(), 我就醒了, 我就继续执行. 但是, 你即使执行过来的时候, 哪怕你被打断了, 你也必须检查现在是不是

      还在阻塞状态, 若还是阻塞, 就继续睡. 睡醒的第一件事, 就是把其他的线程也叫醒, 然后再做自己的事(多线程同步).

  • 相关阅读:
    Linux文件/proc/net/tcp分析
    为什么系统调用会消耗较多资源
    为什么Linux默认页大小是4KB
    为什么Linux需要虚拟内存
    Make 命令教程
    关于同步的一点思考-下
    关于同步的一点思考-上
    Linux下的进程控制块(PCB)
    汇编语言基础:寄存器和系统调用
    内核栈与thread_info结构详解
  • 原文地址:https://www.cnblogs.com/bosongokay/p/6897918.html
Copyright © 2011-2022 走看看