什么是线程安全
-
我们先来了解一下什么叫线程,线程就是指CPU的调度为最小单元,简单来说线程就是将代码按顺序执行下来,执行完毕就会马上结束的一条线。必须要悉知的一点是:“线程安全”指的并不是线程的安全,而是指内存的安全。这么说的原因则是和操作系统息息相关。
当前的主流操作系统都是多任务的,即多个进程能够同时运行。不过,为了能够保证安全,每个进程都只能去访问分配给自己的内存空间,而不能访问别的进程的,这是由操作系统保障的。
实际上在所有进程的内存空间中都会有一块特殊的公共区域,通常称为堆,也成为内存。并且进程内的所有线程都可以访问到该区域,这就是造成问题的潜在原因。
所以所谓的线程安全其实究其根本指的就是,在堆/内存中保存的数据由于能够被任何线程访问到,所以在没有限制的情况下存在被意外修改的风险。换句话说就是堆内存空间在没有保护机制的情况下,对多线程来说是十分不安全的地方,因为你放进去的数据,很有可能被别的线程给“破坏”掉。
其实在程序中也是这样的,所以操作系统会为所有的线程分配属于它自己的内存空间,这个属于自己的内存空间被称为栈内存,是其它线程无权访问的一个空间。这个空间也是由操作系统保障的。
如果有一些数据只有某个线程能够使用,其它线程不能操作也不需要操作,那么这些数据就可以放入线程的栈内存中。较为常见的例子就是局部变量。
局部变量之所以比较安全,是因为它的定义的“位置”是在方法里。虽然这样做可以达到十分的安全,但是它的使用范围也有了限制,但是安全始终是第一位的啦。
西南地区IT社群(QQ)
- 云南
- 【昆明网页设计交流吧】243627302
- 【昆明nodejs交流吧】 243626749
- 【VUE】838405306
- 【云南程序员总群】343606807
- 【昆明UI设计】104031254
- 【云南软件外包】15547313
- 贵州
- 【PHP/java源码/站长交流群】55692114
- 四川
- 【成都Java/JavaWeb交流】86669225
- 【vaScript+PHP+MySql】116270060
- 【UI设计/设计交流学习群】135794928
- 重庆
- 【诺基亚 JAVA游戏博物馆】 559479780
- 【PHP,Java,Python,C++接单】 442103442
- 西藏