Java中的单例模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的单例模式相关的知识,希望对你有一定的参考价值。

单例模式:

public class Person{
   public static Person per;    //定义一个静态变量,用来存储当前类的对象
   private Person()       //构造一个私有方法
{
}
    public static Person getInstance()    //定义一个静态方法,保存类的实例
{
    if(per==null)
{
    per=this;
}
    return this;
}
    public class Student
{
    Person per=Persion.getInstance();  //调用静态方法
}
    
}

一.如何使用多线程单例模式?

首先我们要知道有哪两种单例模式:

1.懒汉模式:在类加载的时候不创建实例,运行调用时创建类!

优点:加载速度快!

缺点:在寻星时过去对象慢!

2.饿汉模式:在类加载时,就完成初始工作,所以加载速度慢,但是在运行时获取对象的速度快!

 

技术分享
 1 class Person
 2 {
 3  private Person person=null;
 4  private Person () {}
 5  public Person getInstance()
 6  {
 7  if(person==null)
 8 {
 9  person =new Person();
10  }
11  return person;
12  }
13 
14 }*/
15 class Person
16 {
17  private Person person=null;
18 private Person () {}
19 public Person getInstance()
20  {
21  if(person==null)
22 {
23  synchronized(this)
24 {
25  if(person==null)
26  person =new Person();
27 
28  }
29  }
30 51. return person ;
31 }
32 }
33 /*
34  *
35  * 这样在synchronized 线程控制块里面进行多线程的控制,就不会再出现多个线程访问时出现多个对象的情况了.
36  * 还有一点就是外面的person ==null 判断是用来提高效率的,不然第一次都要对锁进行判断,消耗浓资源
37  * 这样可以有次的提高效率
38  * */
39 public class Single {
40  public static void main(String args[])
41  {
42  System.out.println("this is java");
43  }
44 }
技术分享

 

在创建实例的方法中有两部判断,一步锁。如果代码进入到了第一步判断直接进入判断,多线程谁先进谁就能先得到对象。如果该线程对象为空,将当前类的对象交给它,继续等待下一个进程的进入。由于使用synchronized锁定,无法同时进入多个线程(排队的形式!)

 

以上是关于Java中的单例模式的主要内容,如果未能解决你的问题,请参考以下文章

Java中的单例设计模式举例

JAVA中的单例设计模式-分为懒汉式和饿汉式(附代码演示)

JAVA中的单例设计模式-分为懒汉式和饿汉式(附代码演示)

JAVA中的单例设计模式-分为懒汉式和饿汉式(附代码演示)

片段作为 Android 中的单例

Java中的单例模式