synchronized关键字
线程安全的解决方案还有Synchronized,提供了线程同步的方式
Synchronized的使用方式
关键字可以修饰方法或者代码块,确保多个线程在同一时刻,只能有一个线程处理方法或者是同步块,保证线程对访问变量的可见性,有序性,原子性
1.修饰普通方法
//修饰普通方法
public synchronized void add() {
//do something
}
synchronized加在普通方法上,锁住的是当前的对象实例
2.修饰静态方法
//修饰静态方法
public static synchronized void update() {
//do something
}
synchronized加在静态方法上锁住的是当前的class实例,class数据存储在方法区中,锁的静态方法相当于是该类的全局锁
3.修饰代码块
//修饰代码块
public void del(Object obj) {
synchronized (obj) {
//do something
}
}
synchronized加在obj的实例上,锁的是当前obj的代码块
Synchronized特点
Synchronized修饰的方法或者代码块相当于并发中的临界区,在同一时刻JVM只允许一个线程进入执行。synchronized通过锁机制来达到同一时刻只允许一个线程进入执行的效果,在并发编程中,Synchronized锁机制可以做到线程并发的原子性,有序性,可见性
synchronized的原理
Synchronized是如何做到线程安全的,我们研究一下其修饰方法和代码块的字节码文件
javac 将.java文件编程成.class文件
javap 将字节码文件进行反编译
本人才疏学浅,如有错误,烦请指出,谢谢!