📜  关键字 synchronized 可用于以下哪种类型的块: 选择一个或多个选项 实例方法 静态方法 静态类 静态方法中的代码块 (1)

📅  最后修改于: 2023-12-03 14:50:05.770000             🧑  作者: Mango

关键字 synchronized 可用于以下类型的块:

  • [x] 实例方法
  • [x] 静态方法
  • [ ] 静态类
  • [x] 静态方法中的代码块

为了保证多线程环境下的数据同步和一致性,Java提供了关键字 synchronized。它可以用于方法、静态方法以及代码块。下面我们详细介绍每个类型的块如何使用 synchronized 关键字。

  1. 实例方法:

    实例方法是指属于对象实例的方法。使用 synchronized 关键字修饰实例方法时,该方法在被调用时会获取当前对象的锁,其他线程将无法同时访问该方法,直到锁释放。如下所示:

    public synchronized void doSomething() {
        // 该方法的内容被锁定,其他线程无法同时访问
        // ...
    }
    
  2. 静态方法:

    静态方法是指属于类本身而不是对象实例的方法。使用 synchronized 关键字修饰静态方法时,该方法会获取类的锁,其他线程无法同时调用该方法,直到锁释放。如下所示:

    public static synchronized void doSomething() {
        // 该静态方法的内容被锁定,其他线程无法同时访问
        // ...
    }
    
  3. 静态方法中的代码块:

    在静态方法中,我们可以使用 synchronized 关键字来修饰一段代码块。synchronized 关键字将获取类的锁,确保其他线程无法同时访问该代码块,直到锁释放。如下所示:

    public static void doSomething() {
        synchronized (ClassName.class) {
            // 该代码块的内容被锁定,其他线程无法同时访问
            // ...
        }
    }
    

请注意,静态类本身是不可行的选择,因为不能直接对类使用 synchronized 关键字。只能锁定该类的静态方法或静态代码块。

以上是关于关键字 synchronized 在不同类型的块中使用的介绍,它可以帮助我们实现线程安全的代码。