java Object wait方法详细介绍

 更新时间:2017年02月17日 14:05:49   投稿:lqh  
这篇文章主要介绍了java Object wait方法详细介绍的相关资料,需要的朋友可以参考下

java Object wait方法

当线程B访问某个共享资源时,想获取资源的锁对象,发现这个锁已经被线程A拿到了,这个时候,线程B只能被挂起,等待线程A释放锁。

但是拿到锁的线程A在执行的过程中,因为某些条件还不满足,暂时不想继续执行下去,想先等待一下(注意:是已经拿到锁的线程A自己想主动等待的),希望等到某个条件满足后,继续执行任务。在同步代码块里,线程A必须先释放锁,线程B才有资格获取锁,进入同步代码块,执行代码。等线程B执行完后,线程A需要的条件已经满足,那么这个时候必须有一个通知机制,让线程A从等待状态变成执行状态,继续执行代码。

有些同学认为线程A也可以一直循环判断,检查条件是否已经满足,而不一定要中断自己,然后等待。其实这种也是一种思路,但是呢?比较耗CPU,而且也不知道条件何时才能满足。

线程之间要协调沟通,必须有一个等待机制和通知机制,在JAVA里面,对应的就是wait方法和notify方法。

Object的wait方法

 
synchronized (obj) {
    while (condition does not ok){
      obj.wait();
    }
 }

如果想让线程A处于等待状态,可以调用当前对象wait方法。wait方法一旦被调用,也就意味着:线程A已经获得锁了,而且能做的事情都已经做了,现在只能等待了,等待另外的同步操作执行某些代码后,我才回来继续干活。

注意:

wait方法是定义在根类Object上的,Thread继承自Object类,自然也有wait方法。但是这里并不是调用当前线程对象的wait方法,而是具有锁属性的当前对象的wait方法;这一点我也不太理解,我觉得要做到线程A切换到等待状态,之后被人唤醒,就算使用线程A的wait方法和notify方法其实也是可以做到的,但是估计实现起来非常麻烦。另外从场景上看,wait定义在Object也比较合理,表示线程挂在了对象的等待池中。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • java多线程创建及线程安全详解

    java多线程创建及线程安全详解

    多线程是日常开发中的常用知识,也是难用知识。通这篇文章主要给大家介绍了关于java多线程创建及线程安全的相关资料,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Java设计模式详解之门面模式(外观模式)

    Java设计模式详解之门面模式(外观模式)

    为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。本文给大家介绍Java设计模式详解之门面模式(外观模式),感兴趣的朋友参考下吧
    2016-04-04
  • Kafka的监听地址配置实例详解

    Kafka的监听地址配置实例详解

    这篇文章主要给大华介绍了关于Kafka监听地址配置的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • java学生信息管理系统设计与实现

    java学生信息管理系统设计与实现

    这篇文章主要为大家详细介绍了java学生信息管理系统设计与实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Java并发编程之ConcurrentLinkedQueue队列详情

    Java并发编程之ConcurrentLinkedQueue队列详情

    这篇文章主要介绍了Java并发编程之ConcurrentLinkedQueue队列详情,ConcurrentLinkedQueue 内部的队列使用单向链表方式实现,下文更多相关内容叙述需要的小伙伴可以参考一下
    2022-04-04
  • SpringBoot中的定时任务和异步调用详解

    SpringBoot中的定时任务和异步调用详解

    这篇文章主要介绍了SpringBoot中的定时任务和异步调用详解,SpringBoot 定时任务是一种在SpringBoot应用中自动执行任务的机制,通过使用Spring框架提供的@Scheduled注解,我们可以轻松地创建定时任务,需要的朋友可以参考下
    2023-10-10
  • Spring Boot 项目创建的详细步骤(图文)

    Spring Boot 项目创建的详细步骤(图文)

    这篇文章主要介绍了Spring Boot 项目创建的详细步骤(图文),这里我们有两种创建Spring Boot项目的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • 详解JNI到底是什么

    详解JNI到底是什么

    JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互
    2021-06-06
  • Java因项目配置不当而引发的数据泄露

    Java因项目配置不当而引发的数据泄露

    这篇文章主要介绍了Java因项目配置不当而引发的数据泄露解决办法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Java实现房屋出租系统详解

    Java实现房屋出租系统详解

    这篇文章主要介绍了实现Java房屋出租系统的实现过程,文章条理清晰,在实现过程中加深了对相关概念的理解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10

最新评论