Java synchronized 理解
来源:互联网 发布:基金仓位测算数据 编辑:程序博客网 时间:2024/06/05 14:30
搞清楚 synchronized 锁定的是哪个对象,就能帮助我们设计更安全的多线程程序
●首先是synchronized关键字的作用域可以有两种:
・某个对象实例内
synchronized aMethod(){}可以防止多个线程同时访问这个对象的synchronized方法(如果一个对象有多个synchronized方法,只要一个线 程访问了其中的一个synchronized方法,其它线程不能同时访问这个对象中任何一个synchronized方法)
・某个类的范围
synchronized static aStaticMethod{}防止多个线程同时访问这个类中的synchronized static 方法
●synchronized关键字是不能继承的
●要注意的事项
・无论 synchronized 关键字加在方法上还是对象上,它取得的锁都是对象,而不是把一段代码或函数当作锁――而且同步方法很可能还会被其他线程的对象访问
・每个对象只有一个锁( lock )与之相关联
・实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制
●对共享资源的同步访问更加安全的技巧
・定义 private 的 instance 变量 + 它的 get 方法,而不要定义 public/protected 的 instance 变量。如果将变量定义为 public ,对象在外界可以绕过同步方法的控制而直接取得它,并改动它。
・如果 instance 变量是一个对象,如数组或 ArrayList 什么的,那上述方法仍然不安全,因为当外界对象通过 get 方法拿到这个 instance 对象的引用后,又将其指向另一个对象,那么这个 private 变量也就变了,岂不是很危险。 这个时候就需要将 get 方法也加上 synchronized 同步,并且,只返回这个 private 对象的 clone() ――这样,调用端得到的就是对象副本的引用了。
- java thread synchronized 理解
- java thread synchronized 理解
- java thread synchronized 理解
- java synchronized关键字理解
- java synchronized理解
- java中的synchronized理解
- java thread synchronized 理解
- Java-synchronized深入理解
- java中的synchronized理解
- java synchronized 理解
- Java synchronized的理解
- Java synchronized 理解
- 理解 Java synchronized
- Java 中synchronized的理解
- java synchronized锁的理解
- java synchronized的初步理解
- 对Java关键字synchronized的一些理解
- 对java中synchronized的一点理解
- 2016-09-25
- Python 基础回顾(三)
- 遇到问题---java--hibernate多线程中使用getCurrentSession报错innerSetException
- 递归枚举,子集生成,排列生成,回溯都是解决解答树的方法,通过数值跟踪保存排序过程
- UGUI研究院之Text文本渐变
- Java synchronized 理解
- 地址加法器合成物理地址
- 段的概念
- 段寄存器
- 关于SQL的连接查询
- 自定义View之扩展式
- Leetcode #357 Count Numbers with Unique Digits
- 插入排序
- Python 基础回顾(四)