📅  最后修改于: 2023-12-03 15:16:34.839000             🧑  作者: Mango
在多线程编程中,同步是非常重要的概念之一。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同步-静态同步示例的详细介绍,希望对您有所帮助。