检察院网站建设情况成都网站建设设计公司排名
web/
2025/9/28 10:35:29/
文章来源:
检察院网站建设情况,成都网站建设设计公司排名,海网站建设,域名流量查询Google Guava项目是每个Java开发人员都应该熟悉的库的集合。 Guava库涵盖I / O#xff0c;集合#xff0c;字符串操作和并发性。 在这篇文章中#xff0c;我将介绍Monitor类。 Monitor是一种同步构造#xff0c;可以在使用ReentrantLock的任何地方使用。 在任何时候#x… Google Guava项目是每个Java开发人员都应该熟悉的库的集合。 Guava库涵盖I / O集合字符串操作和并发性。 在这篇文章中我将介绍Monitor类。 Monitor是一种同步构造可以在使用ReentrantLock的任何地方使用。 在任何时候只有一个线程可以占用一个监视器。 Monitor类具有进入和离开操作这些操作在语义上与ReentrantLock中的锁定和解锁操作相同。 此外监视器支持在布尔条件下等待。 比较Monitor和ReentrantLock 对于初学者将Monitor和ReentrantLock进行并排比较会很有帮助。 public class ReentrantLockSample {private ListString list new ArrayListString();private static final int MAX_SIZE 10;private ReentrantLock rLock new ReentrantLock();private Condition listAtCapacity rLock.newCondition();public void addToList(String item) throws InterruptedException {rLock.lock();try {while (list.size() MAX_SIZE) {listAtCapacity.await();}list.add(item);} finally {rLock.unlock();}}
} public class MonitorSample {private ListString list new ArrayListString();private static final int MAX_SIZE 10;private Monitor monitor new Monitor();private Monitor.Guard listBelowCapacity new Monitor.Guard(monitor) {Overridepublic boolean isSatisfied() {return (list.size() MAX_SIZE);}};public void addToList(String item) throws InterruptedException {monitor.enterWhen(listBelowCapacity);try {list.add(item);} finally {monitor.leave();}}
} 从示例中可以看到两者实际上具有相同数量的代码行。 与ReentrantLock Condition相比 Monitor会在Guard对象周围增加一些复杂性。 但是 Monitor addToList方法的清晰度远远不能弥补。 这可能只是我的个人喜好但我一直发现 while(somethingtrue){condition.await()
} 有点尴尬。 使用指南 应当注意返回void enter方法应始终采用以下形式 monitor.enter()
try{...work..
}finally{monitor.leave();
} 并enter返回boolean方法应类似于 if(monitor.enterIf(guard)){try{...work..}finally{monitor.leave();}
}else{.. monitor not available..
} 布尔条件 Monitor类上的enter方法太多无法有效地完成一篇文章所以我将挑选我的前三名然后按照从最小阻塞到最大阻塞的顺序进行介绍。 tryEnterIf –线程将不等待进入监视器仅在保护条件返回true时才进入。 enterIf –线程将等待进入监视器但前提是保护条件返回true。 还有enterIf方法签名这些签名允许指定超时以及enterIfInterruptible版本。 enterWhen –线程将无限期等待监视器和条件返回true但可以被中断。 同样也有用于指定超时的选项以及enterWhenUniterruptible版本。 结论 我还没有机会在工作中使用Monitor但是我可以看到布尔保护条件的粒度有用。 我已经写了一些基本的示例代码和一个随附的单元测试以演示本文所涵盖的一些功能。 它们在这里可用。 一如既往地欢迎您提出意见/建议。 在我的下一篇文章中我将介绍Guava并发中的更多内容。 资源资源 番石榴项目首页 监控器API 样例代码 参考资料 Google Guava –我们的JCG合作伙伴 Bill Bejeck在“ 随机编码想法”博客上与Monitor进行了同步 。 翻译自: https://www.javacodegeeks.com/2012/11/google-guava-synchronization-with-monitor.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83284.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!