为什么Wait和notify方法在Object类中
为何 wait,notify 和 notifyAll 属于 Object 类? 为什么它们不应该在 Thread 类中? 以下观点我认为是有道理的:

  1. wait 和 notify 不仅仅是普通方法或同步工具,更重要的是它们是 Java 中两个线程之间的通信机制。
    对语言设计者而言, 如果不能通过 Java 关键字(例如 synchronized)实现通信此机制,同时又要确保这个机制对每个对象可用, 那么 Object 类则是的合理的声明位置。
    记住同步和等待通知是两个不同的领域,不要把它们看成是相同的或相关的。同步是提供互斥并确保 Java 类的线程安全,而 wait 和 notify 是两个线程之间的通信机制。
  2. 每个对象都可上锁,这是在 Object 类而不是 Thread 类中声明 wait 和 notify 的另一个原因。
  3. 在 Java 中,为了进入代码的临界区,线程需要锁定并等待锁,他们不知道哪些线程持有锁,而只是知道锁被某个线程持有, 并且需要等待以取得锁, 而不是去了解哪个线程在同步块内,并请求它们释放锁。
  4. Java 是基于 Hoare 的监视器的思想:在Java中,所有对象都有一个监视器。线程在监视器上等待,为执行等待,我们需要2个参数:
    一个线程
    一个监视器(任何对象)
    在 Java 设计中,线程不能被指定,它总是运行当前代码的线程。但是,我们可以指定监视器(这是我们称之为等待的对象)。
    这是一个很好的设计,因为如果我们可以让任何其他线程在所需的监视器上等待,这将导致“入侵”,影响线程执行顺序,导致在设计并发程序时会遇到困难。
    请记住,在 Java 中,所有在另一个线程的执行中造成入侵的操作都被弃用了(例如 Thread.stop 方法)。

为什么Wait和notify方法在Object中?相关推荐

  1. 为什么wait、notify、notifyAll方法定义在Object中而不是Thread类中

    多线程概述 Java是一个支持多线程的开发语言,多线程并发执行任务可以充分利用CPU资源,提高多任务并发执行效率(注意区分:多线程并不会加快任务的执行速度,而是可以充分利用多核CPU让线程轮流进行工作 ...

  2. java监视器_java锁与监视器概念 为什么wait、notify、notifyAll定义在Object中 多线程中篇(九)...

    在Java中,与线程通信相关的几个方法,是定义在Object中的,大家都知道Object是Java中所有类的超类 在Java中,所有的类都是Object,借助于一个统一的形式Object,显然在有些处 ...

  3. 多线程笔记补充之线程通信wait和notify方法以及Lock和Condition接口的使用

    线程通信-wait和notify方法介绍: java.lang.Object类提供类两类用于操作线程通信的方法. wait():执行该方法的线程对象释放同步锁,JVM把该线程存放到等待池中,等待其他的 ...

  4. 使用wait()和notify()方法实现生产者消费者模式

    以下总结只是个人理解,如有错误,敬请指正. 一.wait()和notify()作用 wait()和notify()方法是Object类的方法,因为Object类是所有类的根类,因此所有类都有这两个方法 ...

  5. wait/notify/notifyAll在Object类中

    wait/notify/notifyAll在Object类中 因为我们在使用synchronized锁 对象锁可以是任意对象,所以wait/notify/notifyAll需要放在Object类中. ...

  6. sleep()、yield()、join()、wait()/notify()、interupt()——多线程中常用的方法

    一.sleep()--线程休眠 线程休眠:指的是让线程暂缓执行一下,等到了预计时间之后再恢复执行. 线程休眠会交出CPU,让CPU去执行其他的任务.sleep() 方法不会释放锁,也就是说如果当前线程 ...

  7. 使用第三方工具覆写Object中方法

    我们在实际开发中,经常需要覆写Object中的equals,hashcode,toString方法,其实编写这些代码并不是很难,但很枯燥和乏味. 下面推荐Google的Guava jar包来覆写上面的 ...

  8. day17 Java的object中常见的方法以及内部类

    1.Object中常见的方法 1.1tostring 1.2equals 1.3finalize 1.3.1可以给个机会调用GC 1.4hashcode 2内部类 2.1概念 2.2内部类例子 2.3 ...

  9. java中clone方法_Java Object clone()方法– Java中的克隆

    java中clone方法 Cloning is the process of creating a copy of an Object. Java Object class comes with na ...

最新文章

  1. 商品详细信息的代码html_电商网站的商品详情页系统架构
  2. proto buffer
  3. vuex分模块后,如何获取state的值
  4. C++中引用()的用法和应用实例
  5. oracle存储过程 ppt,oracle_存储过程培训(动画版本)详解.ppt
  6. Linux下Shell文件内容替换(sed)(转)
  7. HBase与Zookeeper数据结构查询
  8. 基于SPringBoot的药品管理系统
  9. elementUI + vue实现 Excel筛选功能
  10. GalForUnity简介
  11. 简述ip地址的abc类如何划分_IP地址ABC类解释
  12. JavaScript刷新当前页面的五种方式
  13. Docker端口映射实例
  14. 使用FFmpeg进行360全景视频格式转换:filter v360
  15. 物联网的主要特征是什么,目前的主要应用哪些?
  16. C#读取Excel数据在CAD上展图
  17. Jenkins环境部署
  18. 【Java】什么是面向对象
  19. Linux命令模式下打开摄像头,Linux下利用Opencv打开笔记本摄像头问题
  20. Vue项目打包步骤详细流程,新手必需掌握的知识点!

热门文章

  1. 【linux】Debian10.8安装中文输入法-搜狗输入法
  2. centos安装duf
  3. 为什么任何时间都可以登录淘宝,淘宝不需要维护服务器吗?
  4. 为什么Linux安全,基于它的安卓却被吐槽不安全
  5. 华为鸿蒙系统有多快?多家巨头实测比安卓快60%
  6. 找不到或无法加载主类 HelloWorld
  7. Love 6の大学生活 经验和心得
  8. R-知识点总结(来自:http://www.cnblogs.com/changbosha/p/5745288.html)
  9. 51单片机LED 1秒闪烁
  10. c语言课设报告仓库管理系统,c语言课设仓库管理系统.doc