Guava併發:使用Monitor控制併發
Monitor就像java原生的synchronized, ReentrantLock一樣,每次只允許一個執行緒執行程式碼塊,且可重佔用,每一次佔用要對應一次退出佔用。
/** * 透過Monitor的Guard進行條件阻塞 */public class MonitorSample { private Listlist = 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部落格 ” ,連結:http://blog.itpub.net/1916/viewspace-2805643/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Guava併發:ListenableFuture使用介紹以及示例Guava
- 併發控制
- goroutine併發控制Go
- mysql併發控制MySql
- PGSQL併發控制SQL
- oracle併發控制Oracle
- 併發程式設計之:JUC併發控制工具程式設計
- Java併發(十九)----Monitor原理及Synchronized原理Javasynchronized
- PostgreSQL 併發控制機制(3):基於時間戳的併發控制SQL時間戳
- 更簡的併發程式碼,更強的併發控制
- go併發之goroutine和channel,併發控制入門篇Go
- 【資料庫】併發控制資料庫
- Java多執行緒與併發 - 瞭解“monitor”Java執行緒
- Go高效併發 10 | Context:多執行緒併發控制神器GoContext執行緒
- 併發工具類(三)控制併發執行緒的數量 Semphore執行緒
- MySQL如何加鎖控制併發MySql
- pgsql事務與併發控制SQL
- InnoDB -MVCC多版本併發控制MVC
- MySQL MVCC(多版本併發控制)MySqlMVC
- oracle併發與多版本控制Oracle
- 15-併發控制理論
- python併發4:使用thread處理併發Pythonthread
- Java併發---併發理論Java
- 併發-1-併發模型模型
- 5分鐘搞定Promise控制併發Promise
- MVCC多版本併發控制器MVC
- 淺談java中的併發控制Java
- mysql併發控制原理知識點MySql
- 3.1 JDK併發包之同步控制JDK
- Java併發控制機制詳解Java
- mysql的mvcc(多版本併發控制)MySqlMVC
- 資料複製的併發控制
- 【C/C++】5.併發控制C++
- 使用併發工具實現 RPC 呼叫流量控制RPC
- 併發程式設計-9.在 .NET 中使用併發集合程式設計
- 併發容器與框架——併發容器(二)框架
- 佇列的併發使用佇列
- 「分散式技術專題」併發系列一:基於加鎖的併發控制分散式