黑马程序员——多线程下的单例设计模式的安全问题

//多线程下的单例设计模式
class Sing
{
	//饿汉式不存在安全问题,因为其不是线程同步的
	private static Sing s = new Sing();
	private Sing(){}
	public static Sing getInstance()
	{
		return s;
	}
}

class Single
{
	private static Single s = null;
	private Single(){}
	public static Single getInstance()
	{
		if(s==null)
		{
			synchronized(Single.class)
			{
				if(s==null)
					s = new Single();
			}
		}
		return s;
	}
	/*public static xynchronized Single getInstance()
	 * {
	 *     if(s==null)
	 *        s = new Single()
	 *
	 *      return s;
	 * }
	 * **/
	}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-09-30 16:10:51

黑马程序员——多线程下的单例设计模式的安全问题的相关文章

黑马程序员-学习日记(单例设计模式的两种类型)

单例设计模式:解决一个类在内存中只有一个对象 多个程序使用统一配置信息对象时,需要保证该对对象的唯一性. 保证对象唯一性的实现步骤: 1.将构造函数私有化:为了避免其他程序过多建立该对象,禁止其他程序调用该对象. 2.在类中创建一个本类对象:为了让其他程序可以访问该类对象 3.提供一个方法可以获取到该对象的方法:方便其他程序访问自定义的本类对象.(类方法的访问方式只有两种,建立对象或定义为静态方法)

黑马程序员—多线程

进程:一个正在执行的程序. 线程:就是进程中一个独立的控制单元,线程在控制进程的执行,一个进程中至少有 一个线程. 主线程:JVM启动的时候会有一个进程java.exe,该进程中至少有一个负责java程序的执行 而且这个线程运行的代码存在于main方法中,该线程称之位主线程. 创建线程的方式有两种: 方法一: 1.定义类继承Thread2.复写Thread类中的run方法 目的:将自定义代码存储在run方法中,让线程运行3.调用线程的start方法 该方法有两个作用:启动线程,调用run方法(存

Swift语言下的单例设计模式实现(SINGLETON)

一.意图 保证一个类公有一个实例,并提供一个访问它的全局访问点. 二.使用场景 1.使用场景 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时. 2.实现的重要三个步骤 私有化构造方法(Swift不支持) 使用一个静态变量保存实例的引用 提供一个全局的访问方法 三. Swift语言下的实现 Swift语言不支持变量及方法的权限,没有办法隐藏变量及方法,可以随意直接创建一个实例.单例的创建有很多写

黑马程序员——多线程总结

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 多线程和进程的区别? 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高. 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率. 线程在执行过程中与进程还是有区别的.每个独立的线程有一个程序运行的入口.顺序执行序列和程序的出口.但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程

黑马程序员--多线程同步的一层对象/二层对象/三层对象写法对比

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 前言: 在面向对象的思想下,线程的写法根据要创建的对象层级可以分为三种写法: 1,一层对象写法:采用extends Thread,复写父类的run()方法,直接建立一个线程实例对象的方式,这种方式简单,适用于单任务的单线程需求.在此不做过多讨论; 2,二层对象写法:采用implements Runnable接口,复写接口的run()方法,得到二级对象--通常称为任务对象;再通过将二级对象传入(

黑马程序员——多线程

一.概述 (一)进程 正在执行中的程序,每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. (二)线程 进程中的一个独立的控制单元.线程在控制着进程的执行.一个进程中至少有一个线程.只要进程中有一个线程在执行,进程就不会结束. (三)多线程 在java虚拟机启动的时候会有一个java.exe的执行程序,也就是一个进程.该进程中至少有一个线程负责java程序的执行.而且这个线程运行的代码存在于main方法中.该线程称之为主线程.JVM启动除了执行一个主线程,还有负责垃圾回收

黑马程序员------多线程(一)

1.1多线程的概念 1.1.1 进程.线程.多进程的概念进程:是一个正在执行中的程序. 每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 线程:就是进程中的一个独立的控制单元. 线程在控制着进程的执行. 一个进程中至少有一个线程. Java VM 启动的时候会有一个进程java.exe. 该进程中至少一个线程负责java程序的执行.而且这个线程运行的代码存在于main方法中.该线程称之为主线程. 扩展:其实更细节说明jvm,jvm启动不止一个线程,还有负责垃圾回收机制的

多线程下的单例-double check

话不多说直接上代码: public sealed class Singleton { private static Singleton _instance = null; // Creates an syn object. private static readonly object SynObject = new object(); Singleton() { } public static Singleton Instance { get { // Double-Checked Lockin

黑马程序员 - 多线程

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 多线程进程:一个正在执行中的程序,每一个进行执行,都有一个执行顺序,该顺序就是一个执行路径,或者加一个执行单元线程:就是进程中的一个独立的执行路径,一个进程中至少有一个线程.java vm启动的时候会有一个进程java.exe.该进程中至少一个线程负责执行java程序的执行,而且这个线程运行的代码存在于main方法中.该线程称之为主线程.扩展:其中更细节说明java vm启动不止一个线程,还有