private static Callback callback;
public Foo()
{
super(getCallback());
}
private static Callback getCallback()
{
callback = new Callback();
return callback;
}
構造函數Foo()可能會被多個線程調用。我關心的是私有靜態字段'callback'和靜態方法'getCallback()'。幫忙查看下面的代碼,線程安全嗎?
如可以看到的,每一次「getCallback()」被調用時,它分配一個新的值,以靜態字段「回調」。
我猜測是,它不是線程安全的,因爲關鍵字靜態始終附加到類而不是實例,這樣就意味着,一個Foo的靜態字段「回調」有可能被其他覆蓋正在構造另一個Foo()的線程。它是否正確?
如果我錯了,請糾正我。謝謝!
編輯:我的意圖是保持'回調'在類的某個地方,所以我可以在以後重複使用。但是這並不容易,因爲Foo從一個具有構造函數的類中繼承,該類需要傳遞'callback'。
好問題。這些問題很難通過自己邏輯思考。 – 2009-06-01 09:53:21