java设计模式进阶_double-checked-locking
2016-09-01 11:03
459 查看
// // // Generated by StarUML(tm) Java Add-In // // @ Project : Untitled // @ File Name : Item.java // @ Date : 2016/9/1 // @ Author : // // public class Item { public String name; public int level; } import java.util.ArrayList; import java.util.List; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; // // // Generated by StarUML(tm) Java Add-In // // @ Project : Untitled // @ File Name : Inventory.java // @ Date : 2016/9/1 // @ Author : // // public class Inventory { private int inventorySize; private List<Item> items; private Lock lock = new ReentrantLock(); public Inventory(int inventorySize) { this.inventorySize = inventorySize; this.items = new ArrayList<>(inventorySize); } public List<Item> getItems() { return items; } public boolean addItem(Item item) { if(items.size() < inventorySize) { lock.lock(); try { if(items.size() < inventorySize) { items.add(item); System.out.println(Thread.currentThread()); return true; } } finally{ lock.unlock(); } } return false; } } import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class App { public static void main(String[] args) { final Inventory inventory = new Inventory(300); ExecutorService executorService = Executors.newFixedThreadPool(3); for(int i = 0;i < 3; i++) { executorService.execute(new Runnable(){ @Override public void run() { while(inventory.addItem(new Item())); System.err.println("inventory list:" + inventory.getItems().size()); } }); } } } /* Thread[pool-1-thread-1,5,main] Thread[pool-1-thread-1,5,main] Thread[pool-1-thread-1,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-3,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] Thread[pool-1-thread-2,5,main] inventory list:300 inventory list:300 inventory list:300 */
相关文章推荐
- Java设计模式之单例模式 double---checked----locking双重检查锁定
- Java多线程 -- 单例模式的Double-checked Locking (DCL)问题
- Java中的模式 --单态-多线程下的处理方式(部分翻译 double-checked locking break)
- Java多线程 -- 单例模式的Double-checked Locking (DCL)问题
- (设计模式)Singleton和Double-Checked Locking模式
- 经典j2ee设计模式Double-Checked Locking失效问题
- 【转】Java中的模式 --单态 (部分翻译 double-checked locking break)
- [zt]Singleton和Double-Checked Locking设计模式—UML图及代码实现
- Double Checked Locking 模式
- Java Double-Checked Locking 已死,C++ 呢?
- 0102 Java设计模式02-代理模式【进阶】
- 解决fortify扫描出的Code Correctness: Double-Checked Locking问题(java语言)
- Java中的Double-checked Locking (DCL)问题
- 单例模式与双重检测(Double-Checked Locking, DCL)
- Java Double-Checked Locking 已死,C++ 呢?
- Double Checked Locking 模式
- 0103 Java设计模式03-动态代理(概念篇)【进阶】
- 单例模式如何在多线程环境下保证安全—Double Checked Locking 模式使用
- ACE中的Double Checked Locking 模式
- Double Checked Locking 模式 -- 单例实现的多线程版本