189 8069 5689

java单例代码实现 JAVA 单例

如何在Java中实现单例模式?

单例模式1:

成都创新互联自2013年创立以来,先为会泽等服务建站,会泽等地企业,进行企业商务咨询服务。为会泽企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

public

class

singleton{

private

static

singleton

st

=

null;

private

singleton(){

}

public

static

singleton

getinstance(){

if(st

==

null){

st

=

new

singleton();

}

return

st;

}

}

单例模式2:

public

class

singleton{

private

static

singleton

st

=

new

singleton();

private

singleton(){

}

public

static

singleton

getinstance(){

return

st;

}

}

多线程1:

导入thread所在的包

public

class

mythread1

extends

thread{

public

void

run(){

xxxxx写自己的代码

}

}

多线程2

导入runnable所在的包

public

class

mythread2

implements

runnable{

public

void

run(){

xxxxx写自己的代码

}

}

另写一个测试类,在main方法中这样写:

thread

t

=

new

mythread1();

或者

runnable

r

=

new

mythread2();

thread

t

=

new

thread(r);

java怎么实现单实例运行

Java实现单例的5种方式

1. 什么是单例模式

单例模式指的是在应用整个生命周期内只能存在一个实例。单例模式是一种被广泛使用的设计模式。他有很多好处,能够避免实例对象的重复创建,减少创建实例的系统开销,节省内存。

2. 单例模式和静态类的区别

首先理解一下什么是静态类,静态类就是一个类里面都是静态方法和静态field,构造器被private修饰,因此不能被实例化。Math类就是一个静态类。

知道了什么是静态类后,来说一下他们两者之间的区别:

1)首先单例模式会提供给你一个全局唯一的对象,静态类只是提供给你很多静态方法,这些方法不用创建对象,通过类就可以直接调用;

2)单例模式的灵活性更高,方法可以被override,因为静态类都是静态方法,所以不能被override;

3)如果是一个非常重的对象,单例模式可以懒加载,静态类就无法做到;

那么时候时候应该用静态类,什么时候应该用单例模式呢?首先如果你只是想使用一些工具方法,那么最好用静态类,静态类比单例类更快,因为静态的绑定是在编译期进行的。如果你要维护状态信息,或者访问资源时,应该选用单例模式。还可以这样说,当你需要面向对象的能力时(比如继承、多态)时,选用单例类,当你仅仅是提供一些方法时选用静态类。

单例模式代码怎么写?

 单例模式(Singleton) ,属于最常见的设计模式之一,大部分系统都会用到,目的是为了维护系统中唯一的一个实例。\x0d\x0a可分为eager模式,示例代码如下:\x0d\x0aJava代码\x0d\x0a1.class EagerSingleton{\x0d\x0a2. private static final EagerSingleton m_instance = new EagerSingleton();\x0d\x0a3. private EagerSingleton(){}\x0d\x0a4. public static EagerSingleton getInstance(){\x0d\x0a5. return m_instance;\x0d\x0a6. }\x0d\x0a7.}\x0d\x0aclass EagerSingleton{\x0d\x0aprivate static final EagerSingleton m_instance = new EagerSingleton();\x0d\x0aprivate EagerSingleton(){}\x0d\x0apublic static EagerSingleton getInstance(){\x0d\x0areturn m_instance;\x0d\x0a}\x0d\x0a}\x0d\x0a和 lazy模式,示例代码如下:\x0d\x0aJava代码\x0d\x0a1.class LazySingleton{\x0d\x0a2. private static LazySingleton m_instance = null;\x0d\x0a3. private LazySingleton(){}\x0d\x0a4. public synchronized static getInstance(){\x0d\x0a5. if(m_instance == null){\x0d\x0a6. m_instance = new LazySingleton();\x0d\x0a7. }\x0d\x0a8. return m_instance;\x0d\x0a9. }\x0d\x0a10.}\x0d\x0aclass LazySingleton{\x0d\x0aprivate static LazySingleton m_instance = null;\x0d\x0aprivate LazySingleton(){}\x0d\x0apublic synchronized static getInstance(){\x0d\x0aif(m_instance == null){\x0d\x0am_instance = new LazySingleton();\x0d\x0a}\x0d\x0areturn m_instance;\x0d\x0a}\x0d\x0a}\x0d\x0ajava源码中,Runtime.getRuntime()就是单例的一个例子。\x0d\x0a单例模式的精神就是整个系统中维护一个实例,推广开来,如果在一个系统中需要维护多个示例,那么就产生了多例模式(multiton)。\x0d\x0a多例模式(Multiton) ,通过聚集对象了保留自身的多个示例,根据客户端的参数返回所需要的实例。\x0d\x0a示例代码如下:\x0d\x0aJava代码\x0d\x0a1.class Multiton{\x0d\x0a2. private final int INSTANCE_SIZE = 10;\x0d\x0a3. private static Map instances = new HashMap(INSTANCE_SIZE);\x0d\x0a4. private String name;\x0d\x0a5. private Multiton(){}\x0d\x0a6. private Multiton(String name){\x0d\x0a7. this.name = name;\x0d\x0a8. }\x0d\x0a9. public synchronized static getInstance(String name){\x0d\x0a10. if(instances.containsKey(name)){\x0d\x0a11. return instances.get(name);\x0d\x0a12. }\x0d\x0a13. else{\x0d\x0a14. ins = new Multiton(name);\x0d\x0a15. instances.put(name, ins);\x0d\x0a16. return ins;\x0d\x0a17. }\x0d\x0a18. }\x0d\x0a19.}\x0d\x0aclass Multiton{\x0d\x0aprivate final int INSTANCE_SIZE = 10;\x0d\x0aprivate static Map instances = new HashMap(INSTANCE_SIZE);\x0d\x0aprivate String name;\x0d\x0aprivate Multiton(){}\x0d\x0aprivate Multiton(String name){\x0d\x0athis.name = name;\x0d\x0a}\x0d\x0apublic synchronized static getInstance(String name){\x0d\x0aif(instances.containsKey(name)){\x0d\x0areturn instances.get(name);\x0d\x0a}\x0d\x0aelse{\x0d\x0ains = new Multiton(name);\x0d\x0ainstances.put(name, ins);\x0d\x0areturn ins;\x0d\x0a}\x0d\x0a}\x0d\x0a}\x0d\x0a[nextpage]\x0d\x0a一个实用的例子就是KeyGenerator, 示例代码如下:\x0d\x0aJava代码\x0d\x0a1.class KeyGenerator{\x0d\x0a2. private final int POOL_SIZE = 20;\x0d\x0a3. private static Map instances = new HashMap(16);\x0d\x0a4. private KeyInfo keyinfo;\x0d\x0a5. private KeyGenerator(){}\x0d\x0a6. private KeyGenerator(String keyName){\x0d\x0a7. this.keyinfo = new KeyInfo(POOL_SIZE, keyName);\x0d\x0a8. }\x0d\x0a9. public synchronized static getInstance(String keyName){\x0d\x0a10. if(instances.containsKey(keyName)){\x0d\x0a11. return (KeyGenerator)instances.get(keyName);\x0d\x0a12. }\x0d\x0a13. else{\x0d\x0a14. keyGen = new KeyGenerator(keyName);\x0d\x0a15. instances.put(name, keyGen);\x0d\x0a16. return keyGen;\x0d\x0a17. }\x0d\x0a18. }\x0d\x0a19. public synzhronized int getNextKey(){\x0d\x0a20. return keyinfo.getNextKey();\x0d\x0a21. }\x0d\x0a22. }\x0d\x0aclass KeyGenerator{\x0d\x0aprivate final int POOL_SIZE = 20;\x0d\x0aprivate static Map instances = new HashMap(16);\x0d\x0aprivate KeyInfo keyinfo;\x0d\x0aprivate KeyGenerator(){}\x0d\x0aprivate KeyGenerator(String keyName){\x0d\x0athis.keyinfo = new KeyInfo(POOL_SIZE, keyName);\x0d\x0a}\x0d\x0apublic synchronized static getInstance(String keyName){\x0d\x0aif(instances.containsKey(keyName)){\x0d\x0areturn (KeyGenerator)instances.get(keyName);\x0d\x0a}\x0d\x0aelse{\x0d\x0akeyGen = new KeyGenerator(keyName);\x0d\x0ainstances.put(name, keyGen);\x0d\x0areturn keyGen;\x0d\x0a}\x0d\x0a}\x0d\x0apublic synzhronized int getNextKey(){\x0d\x0areturn keyinfo.getNextKey();\x0d\x0a}\x0d\x0a}


本文标题:java单例代码实现 JAVA 单例
链接地址:http://cdxtjz.com/article/dodsipj.html

其他资讯