📜  Java同步-静态同步示例(1)

📅  最后修改于: 2023-12-03 15:16:34.839000             🧑  作者: Mango

Java同步-静态同步示例

在多线程编程中,同步是非常重要的概念之一。Java提供了多种方式来进行同步,其中之一就是静态同步。

在Java中,每个类都有一个锁,称为“类锁”(也称为“静态锁”)。当线程获取该锁时,它可以访问该类的所有静态同步方法。而其他线程则必须等待该锁被释放才能继续。

下面是一个简单的Java程序示例,展示了静态同步的概念:

public class SyncExample {

    private static int count = 0;

    // 静态同步方法
    public static synchronized void increment() {
        count++;
    }

    public static void main(String[] args) throws InterruptedException {
        // 创建两个线程并启动它们
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 10000; i++) {
                increment();
            }
        });
        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 10000; i++) {
                increment();
            }
        });
        t1.start();
        t2.start();

        // 等待两个线程结束
        t1.join();
        t2.join();

        // 输出计数器的值
        System.out.println("Count is: " + count);
    }
}

在这个示例中,我们有一个静态变量 count 和一个静态同步方法 increment()。在 main() 方法中,我们启动了两个线程并让它们分别调用 increment() 方法10000次。我们期望最终的计数器值应该是20000。

如果我们在 increment() 方法前加上 synchronized 关键字,则会使用静态锁进行同步。这意味着同一时间只有一个线程可以访问 increment() 方法。

在运行程序后,您将看到计数器的最终值是20000,这证明了我们使用了静态同步来正确地解决了竞争条件。

需要注意的是,虽然我们使用了静态同步方法,但其他非静态方法仍可被同时访问。只有 synchronized 关键字和这个类的静态方法有关。

以上就是关于Java同步-静态同步示例的详细介绍,希望对您有所帮助。