栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

线程同步Java

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线程同步Java

听起来您将需要使用“
ReentrantLock
”和“
Condition



您可以使用通过可重入锁创建的条件使一个线程“等待”另一个线程:

private ReentrantLock lock = new ReentrantLock();private Condition condition = lock.newCondition();private boolean someFlag = false;public void threadoneMethod() {  lock.lock();  try {    someFlag = true;    condition.signalAll();  } finally {    lock.unlock();  }}public void threadTwoMethod() {  lock.lock();  try {    while (someFlag == false) {      condition.await();    }    System.out.println("Did some stuff");    someFlag = false;  } finally {    lock.unlock();  }}

threadTwoMethod中的“
condition.await()”行将导致threadTwoMethod暂停,直到threadOneMethod调用“
condition.singalAll()”。在条件上调用信号或等待之前,您必须拥有创建条件的锁,这就是我们调用“ lock.lock()/
lock.unlock()”的原因。

对await()的调用应放置在while循环中,因为即使未发出等待信号的条件,您的线程也可能被随机唤醒。在此示例中,通过使用布尔标志完成循环。

请记住在尝试并最终阻止时锁定/解锁。如果抛出异常,您将要确保您仍然解锁自己的锁,这就是为什么我们在最终块中放入解锁。

您还可以使用linkedBlockQueue和“
take”以一种不太混乱的方式完成类似的事情。如果我有更多的时间,我会更加明确,但是我希望这会有所帮助。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/438247.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号