线程安全与资源共享

链接:

http://tutorials.jenkov.com/java-concurrency/race-conditions-and-critical-sections.html

http://tutorials.jenkov.com/java-concurrency/thread-safety.html

http://tutorials.jenkov.com/java-concurrency/thread-safety-and-immutability.html

学习小结

多个线程访问同一资源时可能会产生竞争条件,导致竞争问题。竞争条件仅发生在多个线程访问同一资源,而存在一到多个线程写入该资源的情况下。因此清楚的知道线程目前共享的资源是很重要的。

局部变量

因为每个线程都拥有一个属于自己的栈,而局部变量存在于栈中,因此局部变量不会被共享,因此是线程安全的。

局部对象引用

局部引用和栈中的变量有点不同,局部引用变量指向了堆中的对象,而堆被所有线程共享,因此可能是线程安全的,也可能是线程不安全的。如果局部对象的引用没有返回给其他线程引用,那么该对象没有被共享,因此是线程安全的。如果对象引用被传给了其他线程使用,那么该对象已经被共享了,是线程不安全的。

成员变量

因为成员变量和对象一起被存放在堆中,因此如果多个线程访问该变量时并修改,这是线程不安全的。

如果多个线程仅仅只访问变量而不修改,是不会产生竞争条件的,因此线程是安全的。

note:

假设堆中的对象可以被多线程安全访问,他可能也是不安全的。这里说的不安全是指当对象代表文件或者数据库的资源时,尽管这个对象是线程安全的,但是他引用的资源不是线程安全的。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值