java设计模式进阶_lazy-loading
来源:互联网 发布:梅花魂优化答案 编辑:程序博客网 时间:2024/05/19 22:59
package com.think.in.java.design.pattern.lesson28;////// Generated by StarUML(tm) Java Add-In//// @ Project : Untitled// @ File Name : Heavy.java// @ Date : 2016/9/1// @ Author : ////public class Heavy { public Heavy() { System.out.println("Creating Heavy ..."); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("... Heavy created"); }}////// Generated by StarUML(tm) Java Add-In//// @ Project : Untitled// @ File Name : HolderNaive.java// @ Date : 2016/9/1// @ Author : ////public class HolderNaive { private Heavy heavy; public HolderNaive(){ System.out.println("HolderNaive created"); } public Heavy getHeavy() { if(heavy == null) heavy = new Heavy(); return heavy; }}////// Generated by StarUML(tm) Java Add-In//// @ Project : Untitled// @ File Name : HolderThreadSafe.java// @ Date : 2016/9/1// @ Author : ////public class HolderThreadSafe { private Heavy heavy; public HolderThreadSafe() { System.out.println("HolderThreadSafe created"); } public synchronized Heavy getHeavy() { if(heavy == null) { heavy = new Heavy(); } return heavy; }}////// Generated by StarUML(tm) Java Add-In//// @ Project : Untitled// @ File Name : JavaHolder.java// @ Date : 2016/9/1// @ Author : ////public class JavaHolder { private Supplier<Heavy> heavy = null; public JavaHolder() { System.out.println("JavaHolder created"); } public Heavy getHeavy(){ return createAndCacheHeavy(); } @SuppressWarnings("unused") private synchronized Heavy createAndCacheHeavy(){ class HeavyFactory implements Supplier<Heavy> { private final Heavy heavyInstance = new Heavy(); @Override public Heavy get() { return heavyInstance; } } if(!HeavyFactory.class.isInstance(heavy)){ heavy = new HeavyFactory(); } return heavy.get(); }}////// Generated by StarUML(tm) Java Add-In//// @ Project : Untitled// @ File Name : Supplier.java// @ Date : 2016/9/1// @ Author : ////public interface Supplier<T> { public T get();}public class App { public static void main(String[] args) { //Simple lazy loader - not thread safe HolderNaive holderNaive = new HolderNaive(); Heavy heavy = holderNaive.getHeavy(); System.out.println("heavy=" + heavy); //Thread safe lazy loader,but with heavy synchronization on each access HolderThreadSafe holderThreadSafe = new HolderThreadSafe(); Heavy another = holderThreadSafe.getHeavy(); System.out.println("another=" + another); //The most efficient lazy loader utilizing java feature JavaHolder javaHolder = new JavaHolder(); Heavy next = javaHolder.getHeavy(); System.out.println("next=" + next); }}/*HolderNaive createdCreating Heavy ...... Heavy createdheavy=com.think.in.java.design.pattern.lesson28.Heavy@173fa2d5HolderThreadSafe createdCreating Heavy ...... Heavy createdanother=com.think.in.java.design.pattern.lesson28.Heavy@1664978bJavaHolder createdCreating Heavy ...... Heavy creatednext=com.think.in.java.design.pattern.lesson28.Heavy@6fb829c7*/
0 0
- java设计模式进阶_lazy-loading
- Java进阶-设计模式
- java设计模式进阶_singleton
- java设计模式进阶_prototype
- java设计模式进阶_builder
- java设计模式进阶_decorator
- java设计模式进阶_strategy
- java设计模式进阶_visitor
- java设计模式进阶_flyweight
- java设计模式进阶_proxy
- java设计模式进阶_facade
- java设计模式进阶_composite
- java设计模式进阶_bridge
- java设计模式进阶_adapter
- java设计模式进阶_interpreter
- java设计模式进阶_mediator
- java设计模式进阶_chain
- java设计模式进阶_iterator
- java的动态代理机制
- oracle 显示unix timestamp 自定义函数
- 隐马尔科夫模型(Hidden Markov Model,HMM)
- 读书的时间哪里来?
- 建议30:使用LINQ取代集合中的比较器和迭代器
- java设计模式进阶_lazy-loading
- AngularJS2.0教程(一)快速上手
- Node.js events模块(一)事件循环
- Scrum基础知识
- VB如何去掉回文本框里的回车符
- 万能数据恢复大师官方版
- Windows下部署Octopress静态网站至GitHub(详细教程)
- 美国能源科学网ESnet高速网络研究技术点梳理
- 查找出现次数超过一半的数