关于java的synchronized关键字

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的方法或代码块,该对象就必须等这个锁结束(即对应的代码块或方法执行完毕)才能再次加锁。


猜你喜欢

转载自blog.csdn.net/astar3/article/details/80581224