MST

星途 面试题库

面试题:Java中同步块与同步方法在使用场景上的区别

请阐述在Java编程中,同步块(synchronized block)和同步方法(synchronized method)各自适合的使用场景,并举例说明。
36.2万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

同步块(synchronized block)

  1. 适合场景
    • 当你只需要同步代码中的一小部分关键代码,而不是整个方法时,使用同步块。这样可以减少锁的粒度,提高并发性能。
    • 当需要对不同的对象使用不同的锁时,同步块能灵活地指定锁对象。
  2. 示例
public class SynchronizedBlockExample {
    private static final Object lock1 = new Object();
    private static final Object lock2 = new Object();

    public void method1() {
        synchronized (lock1) {
            // 这里是需要同步的代码块
            System.out.println("Method 1 is synchronized using lock1");
        }
    }

    public void method2() {
        synchronized (lock2) {
            // 这里是需要同步的代码块
            System.out.println("Method 2 is synchronized using lock2");
        }
    }
}

在上述示例中,method1method2使用不同的锁对象(lock1lock2),这样如果method1method2被不同线程调用,只要不是操作相同锁对象对应的同步块,它们可以并发执行,提高了并发性能。

同步方法(synchronized method)

  1. 适合场景
    • 当整个方法的执行需要保证线程安全,即方法内的所有操作都需要在同一时间只有一个线程执行时,适合使用同步方法。
    • 代码逻辑相对简单,整个方法的原子性操作是必须的场景。
  2. 示例
public class SynchronizedMethodExample {
    private int count = 0;

    public synchronized void increment() {
        count++;
        System.out.println("Incremented count: " + count);
    }
}

在这个例子中,increment方法被声明为synchronized,这意味着在任何时刻,只有一个线程可以调用这个方法,保证了count变量自增操作的线程安全性。