publicclassSingletonClass{
//私有构造函数,保证类不能通过new创建
privateSingletonClass(){}
privatestaticSingletonClassinstance=null;
publicstaticSingletonClassgetInstance(){
if(instance==null){
//创建本类对象
instance=newSingletonClass();
}
returninstance;
}
}
publicclassSingleton{
//首先自己在内部定义自己的一个实例,只供内部调用
privatestaticfinalSingletoninstance=newSingleton();
//私有构造函数
privateSingleton(){
}
//提供了静态方法,外部可以直接调用
publicstaticSingletongetInstance(){
returninstance;
}
}
下面模拟单例模式在多线程下会出现的问题
/**
*懒汉式单例类
*/
publicclassLazySingleton{
//为了易于模拟多线程下,懒汉式出现的问题,我们在创建实例的构造函数里面使当前线程暂停了50毫秒
privateLazySingleton(){
try{
Thread.sleep(50);
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("生成LazySingleton实例一次!");
}
privatestaticLazySingletonlazyInstance=null;
publicstaticLazySingletongetLazyInstance(){
if(lazyInstance==null){
lazyInstance=newLazySingleton();
}
returnlazyInstance;
}
}
publicclassSingletonTest{
publicstaticvoidmain(String[]args){
//创建十个线程调
for(inti=0;i<10;i++){
newThread(){
@Override
publicvoidrun(){
LazySingleton.getLazyInstance();
}
}.start();
}
}
}
publicclassLazySingleton{
privateLazySingleton(){
try{
Thread.sleep(50);
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("生成LazySingleton实例一次!");
}
privatestaticLazySingletonlazyInstance=null;
publicstaticLazySingletongetLazyInstance(){
//先检查实例是否存在,如果不存在才进入下面的同步块
if(lazyInstance==null){
//同步块,线程安全地创建实例
synchronized(LazySingleton.class){
//再次检查实例是否存在,如果不存在才真正地创建实例
if(lazyInstance==null){
lazyInstance=newLazySingleton();
}
}
}
returnlazyInstance;
}
}
publicclassGracefulSingleton{
privateGracefulSingleton(){
System.out.println("创建GracefulSingleton实例一次!");
}
//类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例没有绑定关系,而且只有被调用到才会装载,从而实现了延迟加载
privatestaticclassSingletonHoder{
//静态初始化器,由JVM来保证线程安全
privatestaticGracefulSingletoninstance=newGracefulSingleton();
}
publicstaticGracefulSingletongetInstance(){
returnSingletonHoder.instance;
}
}
publicclassThreadPoolFactoryUtil{
privateExecutorServiceexecutorService;
//在构造函数中创建线程池
privateThreadPoolFactoryUtil(){
//获取系统处理器个数,作为线程池数量
intnThreads=Runtime.getRuntime().availableProcessors();
executorService=Executors.newFixedThreadPool(nThreads);
}
//定义一个静态内部类,内部定义静态成员创建外部类实例
privatestaticclassSingletonContainer{
privatestaticThreadPoolFactoryUtilutil=newThreadPoolFactoryUtil();
}
//获取本类对象
publicstaticThreadPoolFactoryUtilgetUtil(){
returnSingletonContainer.util;
}
publicExecutorServicegetExecutorService(){
returnexecutorService;
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有