单例模式与多线程
来源:互联网 发布:apm飞控软件 编辑:程序博客网 时间:2024/05/22 04:47
package singleton;/* * 忽略try catch代码 * */public class Singleton_1 {/** * @Title: main * @Description: 单例模式 * 1、立即记载,即使用类的时候已经将对象创建完成 * 2、延迟加载,即通过调用get方法,才创建对象 * @param @param args 设定文件 * @return void 返回类型 * @throws *//** * 这种单利是立即加载的,因为getInstance方法没用同步,所以有非线程安全问题 * 同时不能有其他实例变量。 *//*************************************************************************************/private static Singleton_1 singleton_1 = new Singleton_1();//私有成员,外部屏蔽private Singleton_1() {//私有构造,无论延迟或立即加载,保证单例均需要私有无参构造,避免外部new}public static Singleton_1 getInstance() {return singleton_1;}/**************************************************************************************///延迟加载private static Singleton_1 singleton_2 = new Singleton_1();public static Singleton_1 getSingleton_2(){if(singleton_2!=null){}else {singleton_2 = new Singleton_1();}return singleton_2;}/**1、对getSingleton_2 getSingleton_1 方法添加synchronized关键字,实现多线程同步,效率低下,线程需要等待上个线程释放锁,才可以继续执行,一旦线程较多,将会非常慢 * 2、对 singleton_2 = new Singleton_1();添加synchronized,同样有非线程安全问题**///解决办法,DCL(Double-Check locking)双检查锁机制,无参构造省略/**********************************************************************************************/private volatile static Singleton_1 singleton_3;public static Singleton_1 getSingleton_3() {if (singleton_3!=null) {}else{synchronized (Singleton_1.class) {if(singleton_3==null){singleton_3 = new Singleton_1();}}}return singleton_3;}/***********************************************************************************************///使用静态内置类实例单例模式private static class myclass{private static Singleton_1 singleton_4 = new Singleton_1();}public static Singleton_1 getSingleton_4(){return myclass.singleton_4;}}
还可以通过static代码块或enum枚举实现单例模式
阅读全文
0 0
- 单例模式与多线程
- 单例模式与多线程
- 单例模式与多线程
- 单例模式与多线程
- 单例模式与多线程
- 单例模式与多线程
- 单例模式与多线程
- 单例模式与多线程
- 单例模式与多线程
- 单例模式与多线程
- 单例模式与多线程
- 探讨单例模式与多线程单例模式
- 单例模式与多线程的关系
- 【转】JAVA 单例模式与多线程
- JAVA 单例模式与多线程
- JAVA 单例模式与多线程
- Java单例模式与多线程
- 彻头彻尾理解单例模式与多线程
- 邮票codevs2033
- 分布式架构设计之Rest API HAL
- hadoop缺少winutils.exe的bug
- Mybatis对于int类型的参数值为0的判断
- SQL Join/Left Join /Right Join...
- 单例模式与多线程
- Cover Flow布局
- AngularJs学习之路(八)
- Android
- [图像]pngquant一个不错的png压缩工具
- 木块问题
- Tableau--Tableau LOD (详细级别表达式理解)
- python基础--除法、地板除、取余
- MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 3 无效。