Singleton(单例模式)的使用和测试效率
程序员文章站
2022-07-14 09:03:20
...
测试时一个一个试
/**
* @version
* @description
*/
package cn.xasmall.example;
/**
* @author 26248
*
*/
public class TestSingleton{
private String name=null;
// 懒汉模式(存在线程安全问题)
private static TestSingleton testSingleton=null;
//饿汉模式(不存在线程安全问题)
// private static TestSingleton testSingleton=new TestSingleton();
private TestSingleton() {
}
// 懒汉模式
// public static TestSingleton getInstance() {
// if(testSingleton==null)
// testSingleton=new TestSingleton();
// return testSingleton;
// }
// 饿汉模式
// public static TestSingleton getInstance() {
// return testSingleton;
// }
//解决懒汉模式线程安全问题
// synchronized public static TestSingleton getInstance() {
// if(testSingleton==null)
// testSingleton=new TestSingleton();
// return testSingleton;
// }
//double-check(双重检测)
public static TestSingleton getInstance() {
if(testSingleton!=null) {
}
else {
synchronized (TestSingleton.class) {
if(testSingleton==null)
testSingleton=new TestSingleton();
}
}
return testSingleton;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
}
// //内部类
//public class TestSingleton{
// private static class SingleHoder{
// private static final TestSingleton singleton=new TestSingleton();
// }
// private TestSingleton() {
//
// }
// public static final TestSingleton getInstance() {
// return SingleHoder.singleton;
// }
//}
//枚举(不是很理解)
//public enum TestSingleton{
// INSTANCE;
// public void leaveTheBuilding() {
//
// }
//}
/**
* @version
* @description
*/
package cn.xasmall.example;
/**
* @author 26248
*
*/
public class TestThreadSingleton implements Runnable {
public TestThreadSingleton() {
}
public void run() {
// System.out.println(TestSingleton.INSTANCE.hashCode());
System.out.println(TestSingleton.getInstance().hashCode());
}
}
/**
* @version
* @description
*/
package cn.xasmall.example;
/**
* @author 26248
*
*/
public class TestSingletonmain {
//测试时间
public static void main(String[] args) throws Exception {
long starttime=System.currentTimeMillis();
Thread[] threads=new Thread[100];
for(int i=0;i<100;i++) {
threads[i]=new Thread(new TestThreadSingleton());
threads[i].start();
}
for(Thread t:threads)
t.join();
Thread.sleep(3000);
long finishtime=System.currentTimeMillis();
System.out.println("线程测试完成!");
System.out.println("测试使用时间为:"+(finishtime-starttime)+"毫秒");
}
}
推荐阅读
-
使用设计模式中的Singleton单例模式来开发iOS应用程序
-
啰嗦的 java,简洁的 lombok —— lombok 的使用及简单实现单例模式注解
-
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
-
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
-
Python中实现单例模式的n种方式和原理
-
使用设计模式中的Singleton单例模式来开发iOS应用程序
-
单例模式中的饿汉模式和懒汉模式【一看就懂】
-
Flash单例模式怎么使用? Flash cs6单例模式的实例教程
-
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
-
PHP最常用的2种设计模式工厂模式和单例模式介绍