- 浏览: 16621 次
- 性别:
- 来自: 上海
文章分类
最新评论
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同步机制的同步方式
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同步机制的同步方式
发表评论
-
知识点
2017-11-13 18:16 0happen befor: 线程 star before 线程 ... -
ConcurrentHashMap 精髓
2017-11-02 15:13 0ConcurrentHashMap 精髓: 1.s ... -
经典面试题
2017-09-28 16:58 676接触到一个经典的面试 ... -
一致性HASH
2016-11-10 15:54 0在我们做分布式的时候,难免会有一个路由的过程,比如说redis ... -
JVM stop the world
2016-11-09 23:03 452JVM 在进行GC的时候,需要做两个事情,一个是GC root ... -
java Thread 解析
2016-10-27 21:31 0/* * Copyright (c) 1994, 20 ... -
悲观锁 乐观锁,公平锁,非公平锁
2016-10-27 13:55 0悲观锁 乐观锁,公平锁,非公平锁 d 他们的区别 悲观锁与乐 ... -
java LockSupport
2016-10-26 20:33 0/* * ORACLE PROPRIETARY/CONFI ... -
AbstractQueuedSynchronizer 的 CLH
2016-10-26 09:19 0/** * Wait queue node ... -
java 中的wait 与 await
2016-10-25 20:16 0java中wait() 与 await() wait() 方 ... -
java中内存泄漏
2016-09-01 07:43 556内存泄漏(memory leak):该被回收的对象没有被回收, ... -
线程性能与可伸缩性
2016-08-25 23:06 0对性能的思考 性能与可伸缩性 评估各种性能的权衡因素 am ... -
怎么平衡线程并发中的活跃性和安全性
2016-08-25 23:02 0线程的活跃性 活跃性:线程的处理速度 安全性:加锁保证数据的正 ... -
java线程的取消和关闭
2016-08-25 22:55 0java的线程取消和关闭 在正常的业务操作中,碰到进行中的任 ... -
Java 线程池
2016-08-25 09:24 0线程池工作原理 线程池的原理解析 线程池代码解析 -
研发分级
2016-07-27 11:54 0研发分级 今天老大问了一个问题:怎么区分 -
java并发详解
2016-08-31 07:34 585线程安全 1.什么是并发? 2.什么是线程安全 3.如何保证线 ... -
编程建议(持续更新)
2016-07-18 11:01 3761.UML的重要性,推荐plant ... -
java学习路线图
2016-07-14 22:56 671这么长的时间,么有好好总结过自己的学习路线,今天和大家一起分享 ... -
threadLocal的使用场景--事务下的日志记录
2016-07-02 16:04 2867threadLocal在系统中的使 ...
相关推荐
await()、signal()和signalAll()是java.util.concurrent包下的Condition类的方法,它们也用于线程间的协调,但提供了比Object的wait()、notify()更为灵活的机制。 - await():使线程在Condition上等待,同时释放...
在Java多线程编程中,`Condition`是Java并发包`java.util.concurrent.locks`中的一个接口,它提供了比`Object`类中的`wait()`、`notify()`和`notifyAll()`更加灵活和强大的线程间通信机制。`Condition`与`Lock`配合...
Condition将Object监视器方法(wait、notify和notifyAll)分解成截然不同的对象,以便通过将这些对象与任意Lock实现组合使用,为每个对象提供多个等待set(wait-set)。 Condition的基本使用: Condition可以用来...
在调用await()之前,当前线程必须拥有与该Condition关联的锁。调用await()后,线程会释放锁并进入等待状态。 2. signal():唤醒一个在Condition等待队列中的线程。只有当当前线程拥有锁并且调用了unlock()之后,被...
Java中将异步调用转换为同步调用有多种方法,本文将详细介绍五种方法:使用wait和notify方法、使用条件锁、使用Future、使用CountDownLatch、使用CyclicBarrier。 1. 使用wait和notify方法 wait和notify方法是...
Object.wait()和Condition.await()释放锁并进入等待队列;LockSupport.park()则是等待许可,不释放锁。 在BAT(百度、阿里巴巴、腾讯)等公司的面试中,LockSupport作为一个高频考点,通常会要求面试者结合具体场景...
`Condition` 提供了 `await()` 和 `signal()` 方法来替代 `wait` 和 `notify`。 **示例代码:** ```java Lock lock = new ReentrantLock(); Condition condition = lock.newCondition(); lock.lock(); try { ...
这些线程可能在等待某个条件变量变为真,例如在`Thread.sleep()`、`Condition.await()`或`Object.wait()`调用后。这种状态通常表示线程正在进行协作等待,而非竞争资源。 使用jstack进行线程分析时,还需要结合其他...
这与`Object`类的`wait()`、`notify()`和`notifyAll()`方法类似,但`ReentrantLock`的唤醒机制更为明确,可以指定唤醒哪个条件的线程,而`Object`的唤醒是随机的。 5. **锁的状态查询**:`ReentrantLock`提供了`...
- 使用Condition接口提供的await()、signal()和signalAll()方法在java.util.concurrent.locks包中的实现类也可以实现线程间的通信。 10. Java中的并发集合类有哪些? - java.util.concurrent包中提供了一些线程...
在Java并发编程中,`Condition`接口是一个非常重要的概念,它提供了类似于`Object`类的监视器方法(如`wait()`、`notify()`和`notifyAll()`),但具有更高的灵活性。`Condition`接口是Java `java.util.concurrent....
2. **await() / signal()方法**:这是Java Concurrency API中Lock接口的子接口Condition提供的方法,比wait() / notify()更具有可读性和安全性。使用时,需要先获取Lock,然后在特定条件下调用await()等待,signal()...
在JDK 1.5及以后的版本中,Java引入了`java.util.concurrent`包,其中包含了一些强大的并发工具类,如`Lock`接口和`Condition`接口,这些工具大大提升了生产者消费者模式的实现效率和线程安全性。 生产者消费者模式...
Java提供了多种线程间通信的机制,其中最常见的两种方式是基于`synchronized`关键字的`Object`类的`wait()`、`notify()`和`notifyAll()`方法,以及使用`ReentrantLock`类的`Condition`接口的`await()`、`signal()`和...
- `Condition` 是与 `ReentrantLock` 关联的条件变量接口,提供比 `Object` 的 `wait` 和 `notify` 方法更强大的功能。 - **常用方法**: - `void await()`:使当前线程等待,直到被信号唤醒或其他线程中断。 - `...
在Java中,`wait()`和`notify()`是`Object`类中的方法,用于实现线程间的通信。`wait()`使线程等待,`notify()`唤醒等待队列中的一个线程。 - **wait()**:使当前线程放弃对象锁,进入等待此对象的等待锁定池,只有...
2. **wait(), notify(), notifyAll()方法**:这些方法存在于java.lang.Object类中,只有在同步块或同步方法中才能使用。生产者在缓冲区满时调用wait()让出CPU,进入等待状态;消费者在缓冲区空时也调用wait()。当...
2. Wait on condition(等待条件):线程处于这种状态时,它正在等待某个特定条件的发生,通常由`wait()`或`await()`方法引起。例如,线程可能在等待网络数据的读写,或者在`Thread.sleep()`中等待指定时间。 3. ...