在代码中,是线程访问对象的方法或代码块,所以被访问的资源就是对象的方法或代码块
1.对象锁
顾名思义,就是锁住了对象。
synchronized修饰方法,修饰代码块,某线程获得某一个对象的对象锁,那就会获得这个对象其他的加了synchronized锁的方法和代码块的锁,那其他线程就无法访问同一个对象的加了synchronized锁的方法和代码块,当然,其他线程可以访问同一个类的其他对象的加了synchronized锁的方法和代码块。
2.类锁
见名知意,就是锁住了类,
synchronized可以修饰static静态方法和静态代码块,其实就是锁住了这个类的class对象,在jvm的类加载器把字节码文件也就是.class文件从磁盘加载到内存中时会生成唯一一个class对象,这是反射机制,既然只有一个class对象,那如果某线程获得了这个类的类锁,那就获得了这个类中所有的加了synchronized锁的static静态方法或静态代码块的锁,那其他线程就无法访问这个类(所有对象)中加了synchronized锁的static静态方法或静态代码块。
其实二者不同但也相似,符合逻辑
版权声明:本文为sgqsgq1314原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。