`
chairmanMao
  • 浏览: 16874 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

spring单例是线程安全的吗?

阅读更多
我写一段代码来验证:
public class Singleton {
	int m=-1;
	private Singleton() {
    m=0;
	}

	private static Singleton instance = new Singleton();

	public static Singleton getInstance() {
		return instance;
	}
	public static void main(String[] args){
		Singleton single=Singleton.getInstance();
		NewThread t1=new NewThread();
		NewThread t2=new NewThread();
		NewThread t3=new NewThread();
		t1.setSingle(single);
		t2.setSingle(single);
		t3.setSingle(single);
		t1.start();
		t2.start();
		t3.start();
	}
}
class NewThread extends Thread{
    private Singleton single;
	public void setSingle(Singleton single) {
		this.single = single;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();
		for(int i=1;i<10;i++){
			single.m=i;
			System.out.println("current thread:"+Thread.currentThread()+"current m:"+single.m);
		}
	}
	
}

通过输出的结果来是:每个线程都输出了0~9,应该是线程安全的,但我不知道我这个测试逻辑上是否是正确的, ,谁能给个详细的解答?
分享到:
评论
1 楼 zuohan9109 2012-07-15  
测试的时候run()里面最好加上一个停顿,不然有可能测试不准确
public void run() {  
       for(int i=1;i<10;i++){  
            single.m=i;
           Thread.sleep(200);            System.out.println("current thread:"+Thread.currentThread()+"current m:"+single.m);  
        }  
    }  

相关推荐

    spring单例引起的线程安全问题

    【Spring 单例模式与线程安全】 在 Spring 框架中,bean 的实例化策略分为两种:单例(Singleton)和多例(Prototype)。单例模式意味着在整个 Spring 容器中,对于一个给定的 bean 定义,只会存在一个实例。这通常...

    Java 单例模式线程安全问题

    Java 单例模式线程安全问题详解 Java 单例模式线程安全问题是指在 Java 中实现单例模式时,如何确保线程安全的问题。单例模式是指在整个应用程序生命周期中,只有一个实例存在的设计模式。这种模式可以提高性能,...

    Spring面试题.zip

    13、Spring 框架中的单例 Beans 是线程安全的么? 14、请举例说明如何在 Spring 中注入一个 Java Collection? 15、如何向 Spring Bean 中注入一个 Java.util.Properties? 16、请解释 Spring Bean 的自动装配? 17...

    常见设计模式-单例模式

    饿汉式在类加载时即创建单例,因此是线程安全的,初始化速度快,内存占用小。但缺点是无论是否需要,单例都会在类加载时被创建,无法控制实例化时机。 2. **懒汉式**: 懒汉式在第一次需要时才创建单例,节省了...

    基于Spring+Ibatis的安全线程实现

    2. **单例Bean的线程安全**:Spring默认的Bean作用域为单例,如果Bean不是无状态的,即其内部包含共享状态,那么需要谨慎处理线程安全问题。通常,我们可以通过将有状态Bean改为原型作用域,或者使用AOP在方法级别...

    Spring bean为什么默认是单例

    在Spring框架中,Bean的默认作用域是"singleton",即单例模式。这意味着无论有多少次请求获取同一个Bean,Spring容器只会创建一个实例,并且在整个应用生命周期中重复使用这个实例。这种设计决策基于性能和资源管理...

    Spring并发访问的线程安全性问题.docx

    在Spring MVC中,Controller被设计为单例模式,这是为了提高性能和减少内存消耗,因为每个请求都会重用相同的Controller实例。然而,这种设计也带来了线程安全问题,特别是当Controller内部包含可变的实例变量时。...

    java中spring里实现多线程

    此外,Spring的`@Scope`注解可以帮助管理单例bean在多线程环境下的状态,避免数据不一致。 总之,Spring通过提供高级的线程管理和调度工具,简化了在Java应用程序中实现多线程的复杂性。理解并熟练使用这些工具,能...

    spring boot中多线程开发的注意事项总结

    4. **线程安全**:确保所有的数据结构和变量都是线程安全的,或者在并发访问时使用适当的同步机制。 5. **日志和调试**:多线程环境中的日志和调试可能比较复杂,可以使用线程名称、线程ID或其他标识符来区分不同...

    Android单例模式

    ### Android中的单例模式详解 #### 一、概念与特性 单例模式是软件工程中常用的设计模式之一,尤其在Java编程中非常...对于涉及到多线程操作的场景,建议优先考虑使用饿汉式单例或带有线程安全保护的懒汉式单例实现。

    浅谈Spring 的Controller 是单例or多例

    总之,Spring的Controller默认是单例模式,这要求我们在设计时考虑到线程安全问题。如果需要实例级的隔离,可以使用`@Scope("prototype")`注解。同时,利用最佳实践和设计模式,如依赖注入、ThreadLocal,可以帮助...

    25个经典的Spring面试问答.docx

    默认情况下,Spring的单例bean不是线程安全的。如果多个线程同时访问一个非线程安全的单例bean,可能会导致数据不一致。开发者需要自行处理线程安全问题,或考虑使用原型作用域。 12. 如何在Spring中注入集合类和...

    单例模式的七种写法

    将单例定义为枚举类型是一种简洁且线程安全的方式。Java枚举默认是线程安全的,而且防止了反射攻击。 ```java public enum Singleton { INSTANCE; public void whateverMethod() { } } ``` 7. **登记式/注册...

    2.单例模式(Singleton)1

    选择单例模式的实现方式应根据实际需求,考虑性能、线程安全和代码简洁性等因素。静态内部类方式通常被认为是既安全又简洁的选择。 **Spring的单例** 在Spring框架中,Bean默认就是单例模式,Spring会管理Bean的...

    2023最新Spring全家桶面试题-图灵徐庶

    17. Spring框架中的单例bean是线程安全的吗?:是的,但需要注意线程安全问题。 18. Spring如何处理线程并发问题?:通过使用synchronized关键字和Lock机制来处理线程并发问题。 19. 什么是bean装配?:是指将一个...

    java枚举是如何保证线程安全的

    Java枚举类型自Java SE5引入...因此,枚举类型不仅提供了线程安全的保证,还简化了单例模式的实现,是实现线程安全单例的理想选择。在实际开发中,尤其是在多线程场景下,使用枚举类型可以提高代码的可靠性与安全性。

Global site tag (gtag.js) - Google Analytics