`

java condition await() 与object wait()的区别

    博客分类:
  • java
阅读更多
java condition await() 与object wait()的区别

object wait()
* The current thread must own this object's monitor. The thread
     * releases ownership of this monitor and waits until another thread
     * notifies threads waiting on this object's monitor to wake up
     * either through a call to the {@code notify} method or the
     * {@code notifyAll} method. The thread then waits until it can
     * re-obtain ownership of the monitor and resumes execution.

object的方法关键点在于 当前线程和对象的监听器,调用此方法,会释放当前线程对于此对象的监听器,当前线程也处于等待 阻塞状态,前提是当前线程已经获取了CPU的的监听器,

condition await()  旨在当前线程的调度,与对象无关,调用此方法会是当前线程释放LOCK,并且当前线程会进行condition的等待队列,等待有其他condition调用dosignal()
会被唤醒,将当前线程重新放入同步队列中等待获取锁,

两种在表现上有点相似,但是作用机制是有区别的
1.object wait() 不能单独使用,必须是在synchronized 下才能使用,
2.object wait()必须要通过Nodify()方法进行唤醒
3.condition await() 必须是当前线程被排斥锁 lock 后,,获取到condition 后才能使用
4.condition await() 必须通过 sign() 方法进行唤醒

一个是基于对象监听器的同步方式,一个是基于 ASQ同步机制的同步方式
分享到:
评论

相关推荐

    Java线程中wait,await,sleep,yield,join用法总结.pdf

    await()、signal()和signalAll()是java.util.concurrent包下的Condition类的方法,它们也用于线程间的协调,但提供了比Object的wait()、notify()更为灵活的机制。 - await():使线程在Condition上等待,同时释放...

    Java学习资料-详解Condition的await和signal等待/通知机制

    在Java多线程编程中,`Condition`是Java并发包`java.util.concurrent.locks`中的一个接口,它提供了比`Object`类中的`wait()`、`notify()`和`notifyAll()`更加灵活和强大的线程间通信机制。`Condition`与`Lock`配合...

    Java并发之条件阻塞Condition的应用代码示例

    Condition将Object监视器方法(wait、notify和notifyAll)分解成截然不同的对象,以便通过将这些对象与任意Lock实现组合使用,为每个对象提供多个等待set(wait-set)。 Condition的基本使用: Condition可以用来...

    Java编程中实现Condition控制线程通信

    在调用await()之前,当前线程必须拥有与该Condition关联的锁。调用await()后,线程会释放锁并进入等待状态。 2. signal():唤醒一个在Condition等待队列中的线程。只有当当前线程拥有锁并且调用了unlock()之后,被...

    Java异步调用转同步方法实例详解

    Java中将异步调用转换为同步调用有多种方法,本文将详细介绍五种方法:使用wait和notify方法、使用条件锁、使用Future、使用CountDownLatch、使用CyclicBarrier。 1. 使用wait和notify方法 wait和notify方法是...

    Java 多线程与并发(9-26)-JUC锁- LockSupport详解.pdf

    Object.wait()和Condition.await()释放锁并进入等待队列;LockSupport.park()则是等待许可,不释放锁。 在BAT(百度、阿里巴巴、腾讯)等公司的面试中,LockSupport作为一个高频考点,通常会要求面试者结合具体场景...

    wait,notify等线程知识.pdf

    `Condition` 提供了 `await()` 和 `signal()` 方法来替代 `wait` 和 `notify`。 **示例代码:** ```java Lock lock = new ReentrantLock(); Condition condition = lock.newCondition(); lock.lock(); try { ...

    Java线程Dump分析工具jstack解析及使用场景

    这些线程可能在等待某个条件变量变为真,例如在`Thread.sleep()`、`Condition.await()`或`Object.wait()`调用后。这种状态通常表示线程正在进行协作等待,而非竞争资源。 使用jstack进行线程分析时,还需要结合其他...

    java多线程系列(四)ReentrantLock的使用.docx

    这与`Object`类的`wait()`、`notify()`和`notifyAll()`方法类似,但`ReentrantLock`的唤醒机制更为明确,可以指定唤醒哪个条件的线程,而`Object`的唤醒是随机的。 5. **锁的状态查询**:`ReentrantLock`提供了`...

    java经典多线程面试题

    - 使用Condition接口提供的await()、signal()和signalAll()方法在java.util.concurrent.locks包中的实现类也可以实现线程间的通信。 10. Java中的并发集合类有哪些? - java.util.concurrent包中提供了一些线程...

    类似Object监视器方法的Condition接口(详解)

    在Java并发编程中,`Condition`接口是一个非常重要的概念,它提供了类似于`Object`类的监视器方法(如`wait()`、`notify()`和`notifyAll()`),但具有更高的灵活性。`Condition`接口是Java `java.util.concurrent....

    java生产者消费者模式

    2. **await() / signal()方法**:这是Java Concurrency API中Lock接口的子接口Condition提供的方法,比wait() / notify()更具有可读性和安全性。使用时,需要先获取Lock,然后在特定条件下调用await()等待,signal()...

    Java JDK1.5 生产消费者模式解决方案

    在JDK 1.5及以后的版本中,Java引入了`java.util.concurrent`包,其中包含了一些强大的并发工具类,如`Lock`接口和`Condition`接口,这些工具大大提升了生产者消费者模式的实现效率和线程安全性。 生产者消费者模式...

    java并发之线程间通信协作.docx

    Java提供了多种线程间通信的机制,其中最常见的两种方式是基于`synchronized`关键字的`Object`类的`wait()`、`notify()`和`notifyAll()`方法,以及使用`ReentrantLock`类的`Condition`接口的`await()`、`signal()`和...

    java并发编程-AQS和JUC实战

    - `Condition` 是与 `ReentrantLock` 关联的条件变量接口,提供比 `Object` 的 `wait` 和 `notify` 方法更强大的功能。 - **常用方法**: - `void await()`:使当前线程等待,直到被信号唤醒或其他线程中断。 - `...

    java多线程核心编程技术

    在Java中,`wait()`和`notify()`是`Object`类中的方法,用于实现线程间的通信。`wait()`使线程等待,`notify()`唤醒等待队列中的一个线程。 - **wait()**:使当前线程放弃对象锁,进入等待此对象的等待锁定池,只有...

    经典线程同步问题(生产者&消费者)--Java实现.doc

    2. **wait(), notify(), notifyAll()方法**:这些方法存在于java.lang.Object类中,只有在同步块或同步方法中才能使用。生产者在缓冲区满时调用wait()让出CPU,进入等待状态;消费者在缓冲区空时也调用wait()。当...

    JVM线程分析.pdf

    2. Wait on condition(等待条件):线程处于这种状态时,它正在等待某个特定条件的发生,通常由`wait()`或`await()`方法引起。例如,线程可能在等待网络数据的读写,或者在`Thread.sleep()`中等待指定时间。 3. ...

Global site tag (gtag.js) - Google Analytics