Java的synchronized的使用

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对象来实现的方法和同步块的同步的。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200305A0UCJW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券