【发布时间】:2010-10-30 08:47:51
【问题描述】:
private static Callback callback;
public Foo()
{
super(getCallback());
}
private static Callback getCallback()
{
callback = new Callback();
return callback;
}
构造函数 Foo() 可能会从多个线程中调用。我关心的是私有静态字段“回调”和静态方法“getCallback()”。
可以看出,每次调用 'getCallback()' 时,它都会为静态字段 'callback' 分配一个新值。
我的 猜测 是它不是线程安全的,因为关键字 static 总是附加到类而不是实例上,这意味着静态字段“回调”一个 Foo 的值可能会被其他正在构建另一个 Foo() 的线程覆盖。这是正确的吗?
如果我错了,请纠正我。谢谢!
编辑:我的意图是在课堂上的某个地方保留“回调”,以便我以后可以重用它。但这并不容易,因为 Foo 从一个类扩展而来,该类具有强制传递“回调”的构造函数。
【问题讨论】:
-
好问题。这些问题一个人很难从逻辑上思考。
-
它无法编译。 actionCallback 来自哪里。作为一般规则,除非您想混淆,否则不要通过构造函数初始化静态字段。
-
抱歉,'actionCallback' 应该是 'callback'。我的意图是在课堂上的某个地方保留“回调”,以便我以后可以重用它。但这并不容易,因为 Foo 从一个类扩展而来,该类具有强制传递“回调”的构造函数。
标签: java multithreading static-methods