Java的synchronized的使用
Java中的额synchronized关键字,大家应该都很熟悉了,多线程中确保线程安全。Java中每个对象都可以作为锁。下面介绍几种使用:
1、对于普通同步方法,锁的是当前实例对象。一个线程执行同步方法,其他线程对于其他同步方法也是阻塞的,看个例子。
对于普通同步方法,锁的是当前实例对象
输出结果如下,可见方法执行是顺序的,说明锁的是当前实例。
print1 t1
print1 end
print2 t2
print2 end
2、对于静态同步方法,锁的是当前类的Class对象。一个线程调用一个静态同步方法,会把当前的Class对象锁住,执行结果和上面一样。
对于静态同步方法,锁的是当前类的Class对象
3、对于同步方法块,锁的是synchronized里面的对象。两个线程执行同一个方法,都能进入方法里面运行,但是同步块只能一个线程执行。
对于同步方法块,锁的是synchronized里面的对象
输出结果如下,两个线程都可以进入方法,但是只能一个运行同步块,说明锁的是obj对象。
print1 t1
print2 t2
synchronized print1 t1
print1 t1 end
synchronized print2 t2
print2 t2 end
synchronized的实现在JVM里面实现的,基于进入和退出Monitor对象来实现的方法和同步块的同步的。
领取专属 10元无门槛券
私享最新 技术干货