目标
记识java并发,valatile和synchronized区别,lock和synchronized区别
1 .valatile和synchronized区别
前言
-
JMM模型,
并发过程中如何处理可见性、原子性、有序性问题 -
并发编程两个关键问题
-
线程间如何通信:
a> 共享内存----隐式通信
b>消息传递----wait() notify() notifyall(),显式通信 -
线程间如何同步
在共享内存的并发模型中,显式通信通过锁实现:如synchronized
在消息传递的兵法模型中,由于消息的发送必须在消息接收之前,所以同步时隐时的
-
-
定位内存可见性问题
volatitle
volatitle的原理和特性
1. 对于声明了volatile的变量进行写操作时,JVM会向处理器发送一条lock的指令,会把缓存行内的数据写会主内存中
2. 在多处理情况下,保证多个处理器缓存一致性的特点,就会实现缓存一致性问题
-
synchronized:可重入锁,实现互斥性、可见性
-
volititle 比synchronized开销小,可以做到原子性、可见性,但无法做到复合操作的原子性(读取、写入等多个操作).
6.synchronized 原理,
1 .通过moniter监视对象,首先通过monitor.enter监听对象,进入SynchronizedQueue中,执行完后,通过moniter.exit退出监听

代码演示
public class Test {
private static Object object = new Object();
public Test() {
}
public static void main(String[] args) {
synchronized(object) {
System.out.println("nihao");
}
}
//查看字节码
java -c Test.class
public class kai.test.nina.Test {
public kai.test.nina.Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: getstatic #2 // Field object:Ljava/lang/Object;
3: dup
4: astore_1
//monitorenter 监听对象
5: monitorenter
6: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream;
9: ldc #4 // String nihao
11: invokevirtual #5 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
14: aload_1
//monitorenter 监听对象结束
15: monitorexit
16: goto 24
19: astore_2
20: aload_1
21: monitorexit
22: aload_2
23: athrow
24: return
Exception table:
from to target type
6 16 19 any
19 22 19 any
static {};
Code:
0: new #6 // class java/lang/Object
3: dup
4: invokespecial #1 // Method java/lang/Object."<init>":()V
7: putstatic #2 // Field object:Ljava/lang/Object;
10: return
}
2.synchronized区别和lock的区别
首先synchronized的缺陷:
-
synchronized什么时候释放锁,只能被动释放
- 代码块执行完
- 抛出异常
-
synchronized 无法区分读写锁
-
synchronized时java的关键字
而lock区别
- lock时juc中提供的接口
- 可通过ReadWriteLock实现读写分别加锁
- lokc可以主动释放锁
- 可配合condition通知指定线程
常见锁概念
- 可重入锁
- 公平锁,基于时间先后排序获取锁顺序
- 读写锁
网友评论