给出两种单例模式的实现方法,并说明这两种方法的优缺点

写法一:

public class Test {      private static Test test = new Test();     public Test(){};     public static Test getInstance(){         return test;     } } 

写法二:

public class Test {      private static Test test = null;     private Test(){};     public static Test getInstance(){         if (test==null) {             test = new Test();         }         return test;     } }

对于第一种写法,当类被加载的时候,已经创建好了一个静态的对象,因此,是线程安全的,但缺点是在这个对象还没有被使用的时候就已经被创建出来了。

对于第二种写法,缺点如下:这种写法不是线程安全的,例如当第一个线程执行判断语句 if(test==null)时,第二个线程执行判断语句 if(test==null),接着第一个线程执行语句test = new Test(),第二个线程也执行语句

test = new Test(),在这种多线程环境下,可能会创建出两个对象。当然,这种写法的优点是按需创建对象,只有对象使用的时候才会被创建。

推荐这些文章:

单例模式线程安全问题

package com.cj;

class Book {
private Book(){}
private static Book instance = null;

public static Book getInstance() {
if(instance==null){
//同步代码块
synchronized (Book.class){
if(instance==null){
instance = new Book();...

单例模式的几种写法

1. 懒汉模式,双层检查机制
 
 

public class SingleOne {

private static volatile Object object=null;

/**
* 懒汉模式
* 双重判断模式
* @return
*/
public static Object getInstance(){
if(object==null){
synchronized (SingleOne.class){
if(object...

单例模式你 静态内部类

class Singleton {
private static class SingletonInstance {
private static final Singleton INSTANCE = new Singleton();
}

private Singleton() {
}

public static Singleton getInstance() {
return SingletonInstance.INSTANCE;
}
}

 

...

单例模式 懒汉式

线程不安全

class Singleton {
private Singleton() {
}

private static Singleton instance;

public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}

线程安全

class Singleton {
private stati...

方法中调用方法本身的是什么?

问题

static void Main(string[] args)
{
Console.WriteLine(test(5));
}
public static int test(int i)
{
if (i <= 0)
return 0;
else if (i > 0 && i <= 2)
return 1;
...

单例模式 双重检查

class Singleton {
private static volatile Singleton instance;

private Singleton() {
}

public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Si...

单例模式 枚举方式

enum Singleton {
INSTANCE;

public void m() {
System.out.println("test");
}
}

 

...

单例模式 饿汉式

静态变量

class Singleton {
private static final Singleton instance = new Singleton();

private Singleton() {
}

public static Singleton getInstance() {
return instance;
}
}

静态代码块

class Singleton {
private Singleton() {
}

private static final Singleton instanc...

单例设计-静态内部类

public class InnerclassSingleton { private InnerclassSingleton() {}; private static class Singleton { private static final InnerclassSingleton i = new InnerclassSingleton(); } public static InnerclassSingleton getInstance() { return Singleton.i; }}
package com.example.S...

【设计模式】单例模式-Singleton

一、单线程

public class Singleton
{
private static Singleton instance;
int x, y;

private Singleton()
{
}
public static Singleton Instance
{
get
{
if( instance == null )
{
...

文章标题:给出两种单例模式的实现方法,并说明这两种方法的优缺点
文章链接:https://www.dianjilingqu.com/2343.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>