zoukankan      html  css  js  c++  java
  • 谈谈对线程安全的理解

        谈谈对线程安全的理解

        线程安全可以理解为内存安全,堆是内存共享,可以被所有的内存访问。

        当多个线程访问同一个对象时,如果不进行额外的同步控制或者其他的协调操作,调用这个对象的行为都可以获得正确的结果,我们就说这个对象时线程安全的。

        堆是进程和线程共有的空间,分全局堆和局部堆,全局堆就是所有没有分配的空间,局部堆就是用户分配的空间,堆在操作系统对进程初始化的时候分配,运行过程中也可以向系统要额外的堆,但是用完了要还给系统,不然就是内存泄漏。

        在java中,堆是java虚拟机所管理的内存中最大的一块,是所有线程共享的一款线程区域,在虚拟机启动时创建,堆所存在的内存区域唯一目的就是存放对象实例,几乎多有的对象实例和数组都放在堆中。

        栈是每个线程独有的,保存其运行状态和局部自动变量的。栈在线程开始的时候初始化,每个线程的栈互相独立,栈是线程安全的。操作系统在切换线程的时候回自动切换栈,栈空间不需要再高级语言里显式的分配和释放。

        在每个进程的内存空间都有一块特殊的公共区域,通常称为堆内存,进程内多有的线程都可以访问该区域,这就是造成问题的潜在原因。

  • 相关阅读:
    Mybatis多层嵌套查询
    UUID 唯一性实现原理
    oracle 多实例启动
    orcal启动多实例是报 ORA-00845: MEMORY_TARGET not supported onthis system
    java调用quartz 2.2.2方法总结。
    mybatis中like的使用(模糊查询)
    Orcal数据库实现主键ID自增
    spring cloud分布式关于熔断器
    spring cloud分布式健康检查
    spring cloud分布式整合zipkin的链路跟踪
  • 原文地址:https://www.cnblogs.com/hrlizhi/p/14640820.html
Copyright © 2011-2022 走看看