public class Counter {
private int count = 0;
private final Object lock = new Object();
public void increment() {
synchronized (lock) {
count++;
}
}
public int getCount() {
synchronized (lock) {
return count;
}
}
}
public class Main {
private static final Counter counter = new Counter();
public static void main(String[] args) {
// 将 counter 对象发布给其他线程
// ...
}
}
在这个例子中,我们使用 synchronized
关键字和一个 lock
对象来保护 Counter
对象的可变状态。在 increment()
和 getCount()
方法中,我们都使用 synchronized
关键字来获取 lock
对象的锁,并在获取到锁之后修改或访问计数器的值。在将 counter
对象发布给其他线程之前,我们确保对其所有可变状态进行同步,并使用 final
关键字确保 counter
引用不会被修改。这样,其他线程就可以在Main里面安全地访问和修改该对象了。