For investors

股价:

5.36 美元 %

认识达内从这里开始

认真做教育 专心促就业

合肥达内Java培训软件开发线程安全基础知识分享

随着互联网的不断发展,越来越多的人都在学习达内软件编程开发等不同课程体系,而本文我们就通过案例分析来简单了解一下,软件开发线程安全基础知识分享。

合肥达内Java培训软件开发线程安全基础知识分享

我们以常见的一行代码++i,--i为例,计算机的操作姿势可能与你想象的不一样。

在大多数计算机中,给变量自增并不是原子操作,需要下面三步:

①将变量值加载进寄存器

②寄存器自增/自减值

③将寄存器值加载回原变量

多线程环境下,如果你不使用一些原子锁操作:

线程A(++i)可能只执行了前面两步后,之后CPU轮询切换到其他线程或者线程A被抢占CPU;线程B(--i)欻欻执行完所有的三步;

当线程A重新获得CPU,执行三步,一下子影响了线程B的执行预期。

不要认为number是值类型,就存储在栈区

引用类型的值指向堆区(引用),引用的值通常是32位或64位整形

局部变量的值存储在栈区

1.静态成员:线程非安全

类的静态变量即类变量,位于全局区(静态区),为所有对象共享,一旦静态变量被修改,其他对象对修改均可见,故线程非安全。

2.实例成员:单例模式(只有一个对象实例存在)线程非安全,非单例线程安全。

类的实例成员(非静态成员)为实例所有,在堆中分配,若在系统中只存在一个此类实例,在多线程环境下,“犹如”静态变量那样,被某个线程修改后,其他线程对修改均可见,故线程非安全;

如果每个线程执行都是使用不同对象,那实例成员的修改将互不影响,故线程安全。

3.局部变量:线程安全

每个线程执行时将会把局部变量放在各自栈帧的工作内存中,线程间不共享,故不存在线程安全问题。

【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。

<  上一篇:合肥达内培训web前端工程化技术应用问题都有哪些
下一篇:合肥达内ui设计培训交互设计应用实践需要注意哪些问题  >
相关推荐
最新资讯
免费试听课程
  • 全部课程
  • IT课程
  • 设计课程
  • 运营课程
Free courses
最新开班时间
  • 北京
  • 上海
  • 广州
  • 深圳
  • 南京
  • 成都
  • 武汉
  • 西安
  • 青岛
  • 天津
  • 杭州
  • 重庆
  • 厦门
  • 哈尔滨
  • 济南
  • 福州
  • 沈阳
  • 合肥
  • 郑州
  • 长春
  • 苏州
  • 大连
  • 长沙
  • 昆明
  • 温州
  • 太原
  • 南昌
  • 无锡
  • 石家庄
  • 南宁
  • 中山
  • 兰州
  • 佛山
  • 珠海
  • 宁波
  • 贵阳
  • 保定
  • 呼和浩特
  • 东莞
  • 洛阳
  • 潍坊
  • 烟台
  • 运城
  • 开课名称
  • 开班时间
  • 抢座
  • 咨询
  • 开课名称
  • 开班时间
  • 抢座
  • 咨询
预约申请试听课
收起