`

线程问题-单例的属性变量

 
阅读更多

 

1  单例对象 

 

/**
 * @Title:SingleEntity
 * @Author Tony
 * @Date: 2014年6月20日 下午2:20:25
 * @Description:  验证 单例对象的属性 在多线程中访问时不安全的 
 */
public class SingleEntity {

	private static  SingleEntity  singleEntity  ;
	private static String lock="" ; //锁对象不能为空 
	public  static String temp; 
	//私有的构造函数 
	private SingleEntity(){
		
	}
	
	public static SingleEntity getSingleEntity(){
  
		//System.out.println(temp+"========"+Thread.currentThread() );
		try {
			temp = Thread.currentThread().getName() ;//测试用 
			Thread.sleep(5000);
			System.out.println( Thread.currentThread()+"======"+temp );//测试使用 
			
			if(singleEntity ==null){
				synchronized (lock) {  //同步锁为了保证对象的创建只有一个 
					if(singleEntity ==null ){
						System.out.println("33333======="+Thread.currentThread()+"=====创建单例对象");
						singleEntity = new SingleEntity();
					}
				}
			}

		} catch (InterruptedException e) {
			e.printStackTrace();
		}

		return singleEntity;
	}
	
}

 

 2 线程测试类

 

/**
 * @Title:TestThead
 * @Author Tony
 * @Date: 2014年6月20日 下午2:23:10
 * @Description: 线程类 
 */
public class TestThead extends Thread {

	public static void main(String[] args) {
		TestThead t1 = new TestThead();
		TestThead t2 = new TestThead();
		TestThead t3 = new TestThead();
		t1.start();
		t2.start();
		t3.start();
		TestThead t ;
		for(int i=0;i<50;i++ ){
			t = new TestThead();
			t.start();
		}
	}

	@Override
	public void run() {
		SingleEntity singleEntity1 = SingleEntity.getSingleEntity();
		//System.out.println( Thread.currentThread() +"   "+singleEntity1 );
	}
}

 

 

分享到:
评论

相关推荐

    Swift-单例Swift-单例Swift-单例Swift-单例Swift-单例

    首先,单例模式的主要用途在于控制共享资源,确保在整个应用程序中,对于特定对象的访问是唯一的,避免多个实例间的不一致性和同步问题。这在处理数据库连接、网络请求、偏好设置或全局配置时特别有用。 在Swift中...

    设计模式ForiOS-02-单例模式.pdf

    - 将单例对象声明为静态变量,并初始化为nil。 - 创建一个类方法`sharedInstance`,在这个方法中检查单例对象是否为nil,如果为nil则创建一个新的实例并返回。 - 在初始化方法中,执行必要的设置。 例如: ```...

    详解python实现线程安全的单例模式

    在Python中,由于解释器的特性,模块级别的变量实际上天然具有单例属性,因为模块只会被导入一次,因此模块内的变量也就只初始化一次。然而,如果我们想要在类级别实现线程安全的单例模式,就需要考虑多线程环境下的...

    js代码-单例单例单例单例

    - 在异步环境中,确保单例模式的线程安全也是开发者需要考虑的问题。 综上所述,JavaScript中的单例模式通过限制类的实例化次数,提供了统一的访问入口,是实现特定功能的有效工具。通过选择合适的实现方式,可以在...

    objective-c单例模式的完整书写方式

    Objective-C中的单例模式是一种设计模式,用于在整个应用程序中确保只有一个特定类的实例存在,并提供一...在实际开发中,可以根据需求对单例进行扩展,添加额外的功能或属性,但始终要保持单例的唯一性和全局访问性。

    C++面向对象多线程编程-pdf

    - 线程同步:包括互斥量(`std::mutex`)、条件变量(`std::condition_variable`)、信号量(`std::semaphore`)等,确保线程安全。 - `std::async`和`std::future`:异步执行任务,并提供结果获取机制。 - 线程...

    单例模式-ARC

    另外,Swift中实现单例可以使用`static let`和`lazy`组合,或者`shared`属性,这两种方式都保证了线程安全和单例的唯一性。 **总结** 单例模式在ARC环境下需要额外注意内存管理问题,特别是避免循环引用。通过合理...

    C# 23种设计模式(精简版)

    在`MultiThread_Singleton`类中,`instance`变量被声明为`volatile`,防止编译器优化导致的线程可见性问题。`lock`语句用于确保只有一个线程能进入创建实例的代码块。这种方法既保证了线程安全,又避免了不必要的...

    iOS 多线程编程指南 中文版

    - **配置线程属性**: - **配置线程的堆栈大小**:根据线程的任务需求调整。 - **配置线程本地存储**:为每个线程提供独立的存储空间。 - **设置线程的脱离状态**:决定线程是否在父线程结束后自动销毁。 - **...

    iOS单例代码

    在Swift中,实现单例的常见方式是使用`GCD`的`dispatch_once`函数,但现在推荐使用`static`关键字和`lazy`属性来创建线程安全的单例。下面是Swift的单例实现: ```swift class Singleton { static let ...

    C#创建窗体的单例模式

    `Instance`属性使用双重检查锁定(Double-Check Locking)模式来确保线程安全地创建单例。`syncLock`对象用于同步线程,防止多个线程同时进入`lock`块。这样,无论多少次调用`SingletonForm.Instance`,都只会创建一...

    单例模式与垃圾回收机制

    2. **方法区中的类静态属性引用的对象**:如上文所述,单例模式中的静态成员变量即属于此类。 3. **方法区中的常量引用的对象**:如字符串常量池中的字符串。 4. **本地方法栈中JNI的引用的对象**:通过JNI接口与...

    Java设计模式之单例模式的七种写法

    这种写法的问题是它没有考虑线程安全问题,在并发环境下很可能出现多个 Singleton1 实例。 2、懒汉式单例(加同步) public class Singleton2 { private Singleton2() {} private static Singleton2 single = ...

    32.8、高并发线程1

    在实际应用中,`ThreadLocal`广泛用于创建线程安全的单例,如数据库连接、事务上下文、请求相关的属性等。但应谨慎使用,因为它可能会导致内存泄漏,特别是当线程生命周期较长或`ThreadLocal`变量忘记清理时。因此,...

    单例模式.zip(c#设计模式)

    2. 创建单例实例:在类内部创建一个静态私有变量,用于存储单例实例。 3. 提供公共访问点:通过静态方法或属性提供对外获取单例实例的方式。 4. 确保线程安全:在多线程环境下,需要确保在任何时刻只有一个线程能够...

    C#多线程Singleton(单件)模式模板

    - `_instance` 是静态变量,初始化为 `null`,`volatile` 关键字确保了它的值在所有线程间可见。 - `objLock` 是一个静态对象,用于作为`lock`的锁定对象,确保多个线程在访问单例时的互斥性。 - 构造函数是私有...

    IOS应用源码之单例模式 .rar

    单例模式的主要优点是控制资源的共享和避免并发问题,特别是当实例化一个对象需要大量资源或者需要协调多个对象时。在iOS开发中,它常用于管理网络请求、数据库连接、配置信息等。 在Objective-C中,单例的实现通常...

    java设计模式之单例模式详解

    1. **避免作为全局变量容器**:单例模式不应作为全局变量的存储容器,这不仅违背了单例模式的设计初衷,还可能导致代码结构混乱和维护困难。全局变量应考虑放置于对应的类静态成员中。 2. **谨慎处理数据库连接**:...

Global site tag (gtag.js) - Google Analytics