Java synchronized 入门

本贴最后更新于 2339 天前,其中的信息可能已经时异事殊

Java 语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。

synchronized 方法

如果声明了一个方法时,在前面加上关键字 synchronized,那么这个方法就每次只能由一个线程运行。这种方法称为 synchronized 方法,有时也称为同步方法。

public synchronized void run(){ }
synchronized 代码块

如果只是想让方法中的某一部分由一个线程运行,而非整个方法,则可使用 synchronized 代码块,格式如下。

synchronized(对象){ }

下面两个是等效的。

public synchronized void run(){ } public void run(){ synchronized (this) { } }

synchronized 静态方法每次也只能由一个线程运行,但是加锁的方法有所不同。
下面两个是等效的。

class A{ public static synchronized void run(){ } } class A{ public static void run(){ synchronized (A.class) { } } }
总结

synchronized 的核心还是 synchronized 代码块中锁住的对象。对象的锁只能同时被一个线程获得,对象锁被锁住的是对象本身,类锁锁住的是对象的 class 对象。所以下面代码中的 2 个方法可以同时执行。

class A{ public void run1(){ synchronized (this) { } } public static void run2(){ synchronized (A.class) { } } }
小 tips

当前线程是否已获得某一对象的锁可以通过 Thread.holdsLock(Object)方法来确定。

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8216 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...