【发布时间】:2011-01-08 09:07:53
【问题描述】:
我知道在方法之前使用synchronize 关键字会同步到该对象。也就是说,运行同一对象实例的 2 个线程将被同步。
但是,由于同步是在对象级别进行的,因此运行对象不同实例的 2 个线程将不会同步。如果我们在方法调用的 Java 类中有一个静态变量,我们希望它在类的实例之间同步。这两个实例在 2 个不同的线程中运行。
我们可以通过以下方式实现同步吗?
public class Test
{
private static int count = 0;
private static final Object lock= new Object();
public synchronized void foo()
{
synchronized(lock)
{
count++;
}
}
}
既然我们已经定义了一个静态对象lock,并且我们使用关键字synchronized 锁定该锁,那么静态变量count 现在是否在类Test 的实例之间同步?
【问题讨论】:
-
所有这些答案都是无用的,除非锁定对象被声明为 FINAL!
-
还要看java.util.concurrent.atomic.AtomicInteger
标签: java multithreading synchronization class object