java写出一个单例模式,JAVA中单例模式
单一模式是Java中最简单的设计模式之一。这种类型的设计模式属于创造性模式,它提供了创建对象的最佳方式。
如何解决写爬虫IP受阻的问题?立即使用。
这种模式涉及一个单独的类,它负责创建自己的对象,同时确保只创建一个对象。该类提供了访问其唯一对象的方法,可以直接访问该对象,而无需实例化该类的对象。
注意:
1.单例类只能有一个实例。2.singleton类必须创建自己唯一的实例。3.singleton类必须向所有其他对象提供这个实例。
java 单例模式5种写法:
1、饱汉模式(懒汉模式)
//满汉
//非线程安全
公共类Singleton1 {
私有静态Singleton1 singleton=null
私有Singleton1() {
}
公共静态Singleton1 getInstance() {
if (singleton==null) {
singleton=new singleton 1();
}
返回单例;
}
}优点:懒加载启动快,占用资源少,使用时才实例化,无锁。
缺点:非线程安全。
2、饱汉模式(懒汉模式)--线程安全
公共类Singleton {
/**
*定义一个变量来存储创建的类实例。
*/
私有静态Singleton uniqueInstance=null
/**
*将构造方法私有化,以便控制内部创建的实例数量。
*/
私有Singleton(){
}
/**
*定义一个方法为客户端提供一个类实例
* @返回Singleton的实例
*/
公共静态同步单例getInstance(){
//确定存储实例的变量是否有值。
if(uniqueInstance==null){
//如果没有,则创建一个类实例,并将值赋给存储该类实例的变量。
unique instance=new Singleton();
}
//如果有值,那么直接使用它
返回uniqueInstance
}
/**
*示意方法,单个实例可以有自己的操作。
*/
public void singleton operation(){
//函数处理
}
/**
*原理图属性,单线图可以有自己的属性。
*/
私有字符串singletonData
/**
* schematic方法,让外界通过这些方法访问属性值。
* @返回属性的值
*/
公共字符串getSingletonData(){
返回singletonData
}
}优点:同上,但是锁定。
缺点:synchronized是一个独占的排他锁,并发性能差。即使在创建成功之后,获取实例仍然是一个序列化操作。
3、饱汉模式(懒汉模式)--双重加锁检查DCL(Double Check Lock)
公共类Singleton {
/**
*向保存实例的变量添加可变修饰。
*/
private volatile static Singleton实例=null
私有Singleton(){
}
公共静态Singleton getInstance(){
//先检查实例是否存在,如果不存在,则进入下面的同步块。
if(instance==null){
//同步块,创建线程安全的实例
synchronized(Singleton.class){
//再次检查该实例是否存在,如果不存在,则创建它。
if(instance==null){
instance=new Singleton();
}
}
}
返回实例;
}
}优点:懒加载和线程安全。
注意:实例必须用volatile关键字修饰,这保证了完整的初始化。
4、饿汉模式
公共类Singleton {
//4:定义一个静态变量来存储创建的类实例。
//在这里直接创建类实例,只创建一次
私有静态Singleton实例=new Singleton();
//1:私有化构造方法,从而控制内部创建的实例数量。
私有Singleton(){
}
//2:定义一个方法,为客户端提供一个类实例。
//3:这个方法需要定义为类方法,也就是要添加static。
//此方法中不需要控件代码。
公共静态Singleton getInstance(){
//5:直接使用创建的实例。
返回实例;
}
}优点:饿中文模式天生线程安全,使用时没有延迟。
缺点:启动时创建实例,启动慢可能造成资源浪费。
5、Holder模式
公共类Singleton {
/**
*类级内部类,即静态成员类型内部类、内部类的实例和外部类的实例。
*没有绑定关系,只有被调用时才会加载,实现延迟加载。
*/
私有静态类SingletonHolder{
/**
*静态初始化器,由JVM保证线程安全。
*/
私有静态Singleton实例=new Singleton();
}
/**
*私有化建设方法
*/
私有Singleton(){
}
公共静态Singleton getInstance(){
返回SingletonHolder.instance
}
}优点:一种将惰性加载和线程安全(无锁)完美结合的方式。(推荐)
以上是如何编写java singleton模式的细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。