`
cobo85
  • 浏览: 115188 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

线程安全

    博客分类:
  • J2SE
阅读更多

     只有在单例并发的情况下才会出现线程安全问题,引起问题的主要原因就在于对象的资源共享(如实例变量等),不过局部变量是线程安全的。因此在程序设计的时候尽量不要用实例变量。产生这样原因在于java的内存分配机制,实例变量是存放在堆内存中的所有线程共享,而每个线程也都有自己的线程盏,局部变量存放在线程盏中,各线程独享。

 

     简要的说在并发的时候,servlet与struts1都是单例多线的模式,一旦声明的有实例变量,就会引起线程安全问题。struts2是多例单线模式(需要配置)无所谓线程安全。spring中server层对象一般都是无状态的,因此运用单例亦不会出现线程安全问题,如果对象存在状态就需要考虑并发下的线程安全问题。

 

     下面简单的介绍下ThreadLocal:

      ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread

,而是thread local variable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。

线程局部变量(ThreadLocal)其实的功用非常简单,就是为每一个使用该变量的线程都提供一

个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。

从线程的角度看,就好像每一个线程都完全拥有该变量。

    

      个人简要理解为线程的单例。和并发多线程并没有直接的关系,关注的领域也是不同的!不要将ThreadLocal和多线并发混淆。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics