托妞光环 2017-12-27 06:04 采纳率: 100%
浏览 3453
已采纳

java单例多例的线程安全问题

我的理解:
成员变量是保存在堆中,所有线程都能访问;局部变量是保存在每条线程的各自的栈中,互不影响。
单例模式下成员变量会有线程安全问题,因为每条线程都可能会访问到该成员变量;多例模式下则不会有这问题,不会有这问题的原因是 栈中的对象分别指向堆中属于自己的成员变量。
我的理解是否有问题?或者有什么补充的。
谢谢!

  • 写回答

10条回答

  • aduygau 2017-12-28 02:50
    关注

    因为spring是默认是单例模式,而单例模式有三种常用的实现形式都是静态化实例对象。既然静态化了,那么就属于静态区,被多线程共享(每个线程在虚拟机栈里都有自己的栈空间),所以线程不安全。但是如果自己new一个对象是属于线程内部的局部变量,存在new他的那个线程的一个栈帧里,就是线程安全的。所以总结起来就是,这两种的对象存在不一样的地方,共享范围也不一样,所以有的线程安全,有的不安全,就会出现你说的那种情况,望采纳,谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(9条)

报告相同问题?

悬赏问题

  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝