首页 > IT职业 > IT图书 > Guava并发:使用Monitor控制并发
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访问方法:
Monitor.enter //进入Monitor块,将阻塞其他线程直到Monitor.leave
Monitor.tryEnter //尝试进入Monitor块,true表示可以进入, false表示不能,并且不会一直阻塞
Monitor.tryEnterIf //根据条件尝试进入Monitor块
这几个方法都有对应的超时设置版本。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/1916/viewspace-2805643/ ,如需转载,请注明出处,否则将追究法律责任。