javajava的单例模式式怎么用啊,有没有老哥可以举一个容易理解的例子

java单例模式怎么用啊,有没有老哥可以举一个容易理解的例子-
java单例模式怎么用啊,有没有老哥可以举一个容易理解的例子
作者:本站编辑
&&&&&投稿日期:
设计模式刚开始学还用不上,可能到项目里面才会用到,到时候就融会贯通了。
java中的单例模式的代码怎么写:
我从我的博客里把我的文章粘贴过来吧,对于单例模式模式应该有比较清楚的解释: 单例模式在我们日常的项目...
在java开发中,为什么要使用单例模式。。?:
java单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。 特点: 一个类只...
java中什么是单例模式?:
显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个...
什么是Java单例模式啊?:
Java单例模式是确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例,在计算机系统中,线...
如何在Java中实现单例模式?:
单例模式大致有五种写法,分别为懒汉,恶汉,静态内部类,枚举和双重校验锁。 1、懒汉写法,常用写法 c...
java开发什么情况下使用单例模式:
java单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。 特点: 1,一个...
Java单例模式怎么用?:
public class Singleton { private static Singleton ...
Java学习笔记(十三):为什么要使用单例模式:
减少系统资源开销,由于单例只保留一个对象。 提高创建速度,每次都获取已经存在的对象因此提高创建速度 ...
java的单例模式怎么能保证始终是单例:
因为构造器是private
java什么时候要使用单例模式:
通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系...java单例模式怎么用啊,有没有老哥可以举一个容易理解的例子_百度知道
java单例模式怎么用啊,有没有老哥可以举一个容易理解的例子
我有更好的答案
设计模式刚开始学还用不上,可能到项目里面才会用到,到时候就融会贯通了。
采纳率:81%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。职友集:一家做公司点评的网站解法一:只适合单线程环境(不好)
* @author xiaoping
public class Singleton {
private static Singleton instance=null;
private Singleton(){
public static Singleton getInstance(){
if(instance==null){
instance=new Singleton();
注解:Singleton的静态属性instance中,只有instance为null的时候才创建一个实例,构造函数私有,确保每次都只创建一个,避免重复创建。缺点:只在单线程的情况下正常运行,在多线程的情况下,就会出问题。例如:当两个线程同时运行到判断instance是否为空的if语句,并且instance确实没有创建好时,那么两个线程都会创建一个实例。
解法二:多线程的情况可以用。(懒汉式,不好)
public class Singleton {
private static Singleton instance=null;
private Singleton(){
public static synchronized Singleton getInstance(){
if(instance==null){
instance=new Singleton();
注解:在解法一的基础上加上了同步锁,使得在多线程的情况下可以用。例如:当两个线程同时想创建实例,由于在一个时刻只有一个线程能得到同步锁,当第一个线程加上锁以后,第二个线程只能等待。第一个线程发现实例没有创建,创建之。第一个线程释放同步锁,第二个线程才可以加上同步锁,执行下面的代码。由于第一个线程已经创建了实例,所以第二个线程不需要创建实例。保证在多线程的环境下也只有一个实例。缺点:每次通过getInstance方法得到singleton实例的时候都有一个试图去获取同步锁的过程。而众所周知,加锁是很耗时的。能避免则避免。
解法三:加同步锁时,前后两次判断实例是否存在(可行)
public class Singleton {
private static Singleton instance=null;
private Singleton(){
public static Singleton getInstance(){
if(instance==null){
synchronized(Singleton.class){
if(instance==null){
instance=new Singleton();
注解:只有当instance为null时,需要获取同步锁,创建一次实例。当实例被创建,则无需试图加锁。缺点:用双重if判断,复杂,容易出错。
解法四:饿汉式(建议使用)
public class Singleton {
private static Singleton instance=new Singleton();
private Singleton(){
public static Singleton getInstance(){
注解:初试化静态的instance创建一次。如果我们在Singleton类里面写一个静态的方法不需要创建实例,它仍然会早早的创建一次实例。而降低内存的使用率。
缺点:没有lazy loading的效果,从而降低内存的使用率。
解法五:静态内部内。(建议使用)
public class Singleton {
private Singleton(){
private static class SingletonHolder{
private final static Singleton instance=new Singleton();
public static Singleton getInstance(){
return SingletonHolder.
注解:定义一个私有的内部类,在第一次用这个嵌套类时,会创建一个实例。而类型为SingletonHolder的类,只有在Singleton.getInstance()中调用,由于私有的属性,他人无法使用SingleHolder,不调用Singleton.getInstance()就不会创建实例。优点:达到了lazy loading的效果,即按需创建实例。
阅读(...) 评论()}

我要回帖

更多关于 java 内部类单例模式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信