synchronized最关键的就是确定锁的对象,我认为有两种,类和对象:
一、类
对类的加锁有两种方法:
1.public synchronized static void fun(){};
在静态方法前加上synchronized关键字。
2.synchronized(类名.class){};
将加锁的代码块的锁的位置,写上类对象。可以用实例对象.getClass()代替,也可以写其他类名,不一定是自己的类名。
二、实例对象
对实例对象的加锁也有两种方法:
1.public synchronized void fun(){};
在方法前加上synchronized关键字。
2.synchronized(对象){};
将加锁的代码块的锁的位置,写上实例对象。可以用实例对象this代替,同样,到底是什么实例对象,就随意了,不一定非要自己这个实例对象。
额外要注意的是:
如果对于实例对象的加锁没有特殊要求的话,可以使用byte[] byte = new byte[0];代替,因为这个效率高,其他的需要7条操作码,他只需3条。
三、机制
synchronized关键字是针对对象而设计的锁。每个对象只能加一次锁,一旦该对象被加锁,即触发了synchronized的方法或代码块,该对象就必须等这个锁结束(即对应的代码块或方法执行完毕)才能再次加锁。
本文详细介绍了Java中synchronized关键字的使用方法,包括如何对类和实例对象进行加锁,并解释了不同加锁方式的区别和机制。
1750

被折叠的 条评论
为什么被折叠?



