标签:并行执行 可见性 同步 .class 对象 线程 tps 关键字 com
https://www.imooc.com/learn/1086
? 同步方法支持一种简单的策略来防止线程干扰和内存一致性错误,如果一个对象对多个线程可见,则对该对象变量的所有读取或写入都是通过同步方法完成的。
? 即:能够保证在同一时刻最多只有一个线程执行该段代码,达到保证并发安全的效果。
Synchronized是Java的关键字,被Java原生支持。
是最基本的互斥同步手段。
1、两个线程同时访问一个对象的同步方法
? 串行执行
2、两个线程访问的是两个对象的同步方法
? 并行方法,不是一个对象。
3、两个线程访问的是synchronized的静态方法
? 串行执行,只有一个Class对象
4、同时访问同步方法和非同步方法
? 串行执行
5、访问同一个对象的不同的普通同步方法
? 串行,this是同一个
6、同时访问静态synchronized和非静态的synchronized方法
? 并行执行,锁对象不是同一个
7、方法抛出异常后,释放锁
? synchronized会自动释放,Lock等不会
1、可重入:
? 同一个线程的外层函数获取锁后,内层函数可以直接再次获取该锁。
? 避免死锁、提升封装性
2、不可中断
1、加锁和释放锁的原理:现象、时机、字节码
2、可重入原理:加锁次数计数器
3、可见性原理:内存模型
1、效率低
2、灵活度较差
3、无法知道是否成功获取到锁
1、锁对象不能为空、作用域不宜过大、避免死锁
2、尽量使用JUC包下的类,再考虑Synchronized,再考虑Lock
标签:并行执行 可见性 同步 .class 对象 线程 tps 关键字 com
原文地址:https://www.cnblogs.com/wansw/p/10218090.html