单例模式:

 1 public  class Person{
2 public static Person per//定义一个静态变量,用来储存当前类的对象
3 private Person()//构造方法私有化
4 {
5 }
6 public static Person getInstance()//定义一个静态方法,用来获取当前类的实例
7 {
8 if(per==null)
9 {
10 per=this;
11 }
12 return this;
13 }
14
15 }
16 public class Student{
17
18 Person per=Person.getInstance();//调用静态方法
19 }

思考:如何实现多线程下的单例模式呢? 首先我们要知道单例分为两种模式:

懒汉模式和恶汉模式。

懒汉模式:在类加载的时候不创建实例,运行调用的时候创建类。优点:加载速度快!缺点:在运行的时候获取对象慢!

以上的代码就是懒汉式,符合多线程下的单例模式,但是多线程下一般不使用!

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

 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单例的更多相关文章

  1. java单例的几种实现方法

    java单例的几种实现方法: 方式1: public class Something { private Something() {} private static class LazyHolder ...

  2. java单例类/

    java单例类  一个类只能创建一个实例,那么这个类就是一个单例类 可以重写toString方法 输出想要输出的内容 可以重写equcal来比较想要比较的内容是否相等 对于final修饰的成员变量 一 ...

  3. java单例-积木系列

    一步步知识点归纳吧,把以前似懂非懂,了解表面,知道点不知道面的知识归一下档.   懒汉式单例: 私有化构造函数,阻止外界实例话对象,调用getInstance静态方法,判断是否已经实例化. 为什么是懒 ...

  4. Java单例类的简单实现

    对于java新手来说,单例类给我的印象挺深,之前一道web后台笔试题就是写单例类.*.*可惜当时不了解. 在大部分时候,我们将类的构造器定义成public访问权限,允许任何类自由创建该类的对象.但在某 ...

  5. 【Java学习笔记之三十】详解Java单例(Singleton)模式

    概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...

  6. 转:java单例设计模式

    本文转自:http://www.cnblogs.com/yinxiaoqiexuxing/p/5605338.html 单例设计模式 Singleton是一种创建型模式,指某个类采用Singleton ...

  7. 熟悉的味道——从Java单例写到C++单例

    设计模式中,单例模式是常见的一种.单例模式需要满足以下两个条件: 保证一个类只能创建一个示例: 提供对该实例的全局访问点. 关于单例最经典的问题就是DCL(Double-Checked Lock),今 ...

  8. java单例五种实现模式梳理

    java单例五种实现模式 饿汉式(线程安全,调用效率高,但是不能延时加载) 一上来就把单例对象创建出来了,要用的时候直接返回即可,这种可以说是单例模式中最简单的一种实现方式.但是问题也比较明显.单例在 ...

  9. JAVA单例实现方式(常用)

    JAVA单例实现方式(常用) public class Singleton { // Q1:为什么要使用volatile关键字? private volatile static Singleton u ...

  10. Java单例设计模式的实现

    1. 单例设计模式的定义 单例设计模式确保类只有一个实例对象,类本身负责创建自己的对象并向整个系统提供这个实例.在访问这个对象的时候,访问者可以直接获取到这个唯一对象而不必由访问者进行实例化. 单例设 ...

随机推荐

  1. MySQL索引类型 btree索引和hash索引的区别

    来源一 Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 ...

  2. nodejs--实现跨域抓取数据

    最近公司安排给我一个任务,抓取页面数据:http://survey.finance.sina.com.cn/static/20205/20131120.html?pid=20205&dpc=1 ...

  3. easyUI 后台经典框架DEMO下载

    采用easyui 1.2.6 + jquery 1.7.2 设计 有不明白的朋友加群或加我QQ (709047174) Jquery-EasyUi-demo点击我下载

  4. 操作系统开发系列—12.b.从Loader跳入保护模式

    现在,内核已经被我们加载进内存了,该是跳入保护模式的时候了. 首先是GDT以及对应的选择子,我们只定义三个描述符,分别是一个0~4GB的可执行段.一个0~4GB的可读写段和一个指向显存开始地址的段: ...

  5. 初学HTML 常见的标签(一) 文本标签

    最近做iOS开发的过程中, 发现要涉及到JS和原生OC(Swift)的交互, 作为一个Developer, 本着克服一切问题的原则, 开始学习HTML, 在这里记录下自己的学习笔记, 方便以后的复习, ...

  6. 【代码笔记】iOS-背景色随机显示

    一,效果图. 二,工程图. 三,代码. RootViewController.h RootViewController.m - (void)viewDidLoad { [super viewDidLo ...

  7. IOS开发--支付宝支付

    前言:继上次<IOS开发--微信支付>以来,一直没有太多时间,更新总结详细支付这样的长篇大论,很抱歉.今天,推出支付宝支付的详细流程. 1.开始下载和查看支付宝支付的Demo. 我们直接进 ...

  8. linux 中的 tar 解压

    Type at the command prompt tar xvzf file-1.0.tar.gz - tgfo uncompress a gzip tar file (.tgz or .tar. ...

  9. WPF学习之路(十)实例:用户注册

    通过一个注册用户的实例了解页面间数据的传递 首先构建一个User类  User.cs public class User { private string name; public string Na ...

  10. 数据库ORACLE中函数decode的用法

    Decode函数与一系列嵌套的 IF-THEN-ELSE语句相似 decode()函数简介: 使用方法: Select decode(columnname,值1,翻译值1,值2,翻译值2,...值n, ...