多线程小知识2
来源:互联网 发布:mac os 10.13 iso下载 编辑:程序博客网 时间:2024/06/05 16:47
这里写的比较乱,也没有一个好的逻辑。内容也是想到哪写到哪,主要是因为最近看很多面试题还有书,把自己觉得是一下小知识点记下来。
大家就那么一看啊。。。。。。。。。。。。。
非线程安全存在于实例变量中,方法内部的私有变量不存在非线程安全
关键字Synchronized取得的都是对象锁,而不是对一段代码或者方法的锁,哪个线程先执行带Synchronized的方法,哪个线程就持有该对象的锁。只有共享资源的读写才需要同步化,关键字Synchronize声明的方法一定是排队运行的。
A线程调用Synchronized入方法,所以先获得对象锁,其他的线程必须等A线程执行完才能调用其Synchronized方法,但是其他线程可以调用其非Synchronized方法。
Synchronized有锁重入的功能:一个线程得到一个对象锁后,再次请求该对象锁还是可以再次得到的,
也就是说,在Synchronized方法中,还是可以调用本类的其他的Synchronized方法的。
可重入的概念是:自己可以再次获得自己的锁
同样,当存在继承关系时,子类是完全可以通过吧“可重入锁“调用父类的同步方法
当一个线程执行的代码块出现异常时,其 所持有的锁会自动释放
同步不具有继承性
当一个线程访问一个对象的同步代码块时,其他线程对同一个代码块的访问将被阻止,这说明Synchronized使用的对象监视器只有一个
注意:Synchronized关键字加到非static上,是给对象加锁,放到static上是给class类加锁。
string具有缓存功能,所以要是一个string对象加锁之后,两次访问的其实会是一个,要是对象就可以
volatile :作用是是变量在多个对象间可见
强制从公共堆栈中取得变量的值,而不是从每个线程私有的数据栈中取。
缺点是:不支持原子性
关键字volatile是线程同步的轻量级实现,所以volatile的性能要好。
volatile只能用来修饰变量,Synchronize可以用来修饰方法和方法快。
多线程访问volatile不会发生阻塞,而Synchronized会出现阻塞。
volatile能保证数据可见性,但不能保证原子性
Synchronized可以保证原子性,也可以间接保证可见性,
多线程安全包含原子性和可见性
使用原子类进行i++操作,AtomicInteger类就是原子类,
原子类就是在没有锁的情况下,做到线程安全
0 0
- 多线程小知识2
- 多线程小知识
- 多线程小知识和多线程同步、多线程单例设计
- 关于多线程的一些小知识
- 小系统小知识(2)
- 小知识2
- Android小知识-2
- android小知识2
- javase 小知识2
- 代码小知识2
- vc小知识2
- 小知识2
- 小知识积累(2)
- 小知识2
- 多线程知识巩固(2)
- 多线程知识
- 多线程知识
- 多线程知识
- HDOJ 2544 最短路(DIJ+优先队列)
- Python 07:Python函数
- myBatis 操作数据库
- java并发模型
- hdu5754 Life Winner Bo 各种博弈(多校)
- 多线程小知识2
- (学习笔记)实用as快捷键
- 创建Java内部类实例
- bootstrape的CSS样式一
- Tarjin算法
- 嵌入式开发第17天(数据结构、链表的操作)
- poj3641Pseudoprime numbers Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 8854Accepte
- 机械键盘与普通键盘的区别
- 北大暑期学校学习总结