ITPub博客

首页 > IT职业 > IT图书 > Guava并发:使用Monitor控制并发

Guava并发:使用Monitor控制并发

IT图书 作者:kboypkb 时间:2021-09-09 09:39:17 0 删除 编辑

Monitor就像java原生的synchronized, ReentrantLock一样,每次只允许一个线程执行代码块,且可重占用,每一次占用要对应一次退出占用。

/**
 * 通过Monitor的Guard进行条件阻塞
 */public class MonitorSample {    private List list = new ArrayList();    private static final int MAX_SIZE = 10;    private Monitor monitor = new Monitor();     
    private Monitor.Guard listBelowCapacity = new Monitor.Guard(monitor) {        @Override        public boolean isSatisfied() {            return list.size() 

就如上面,我们通过if条件来判断是否可进入Monitor代码块,并再try/finally中释放:

if (monitor.enterIf(guardCondition)) {        try {              doWork();    } finally {           monitor.leave();       }}

其他的Monitor访问方法:

  1. Monitor.enter //进入Monitor块,将阻塞其他线程直到Monitor.leave

  2. Monitor.tryEnter //尝试进入Monitor块,true表示可以进入, false表示不能,并且不会一直阻塞

  3. Monitor.tryEnterIf //根据条件尝试进入Monitor块

这几个方法都有对应的超时设置版本。

原文链接:http://outofmemory.cn/java/guava/concurrent/Monitor

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/1916/viewspace-2805643/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-07-24

  • 博文量
    103
  • 访问量
    8754