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中的单例模式的主要内容,如果未能解决你的问题,请参考以下文章