private static Callback callback;
public Foo()
{
super(getCallback());
}
private static Callback getCallback()
{
callback = new Callback();
return callback;
}
Der Konstruktor Foo() kann möglicherweise von mehreren Threads aus aufgerufen werden. Mein Anliegen ist das private statische Feld 'Callback' und die statische Methode 'getCallback()'.Hilfe zum Überprüfen des folgenden Codes, ist es threadsicher?
Wie man sieht, weist jedesmal, wenn 'getCallback()' aufgerufen wird, dem statischen Feld 'Callback' einen neuen Wert zu. das statische Feld ‚Callback‘ ein Foo kann möglicherweise durch andere
Meine Vermutung ist, dass es nicht sicher ist, fädelt, weil das Schlüsselwort statische immer auf die Klasse gebunden ist nicht der Fall, so dass Mittel, überschreibt Thread, der ein anderes Foo() erstellt. Ist das richtig?
Bitte korrigieren Sie mich, wenn ich falsch liege. Vielen Dank!
EDIT: Meine Absicht ist es, "Callback" irgendwo in der Klasse zu halten, so dass ich es später wiederverwenden kann. Aber das ist nicht einfach, weil Foo von einer Klasse ausgeht, die einen Konstruktor hat, der 'Rückruf' vorschreibt, um weitergegeben zu werden.
Gute Frage. Diese Fragen sind logisch schwer zu durchdenken. –
Es kompiliert nicht. Woher kommt actionCallback? In der Regel initialisieren Sie ein statisches Feld nicht über einen Konstruktor, es sei denn, Sie möchten etwas unklar sein. –
Sorry, 'actionCallback' sollte 'Rückruf' sein. Ich beabsichtige, den Rückruf in der Klasse zu behalten, damit ich ihn später wiederverwenden kann. Aber das ist nicht einfach, weil Foo von einer Klasse ausgeht, die einen Konstruktor hat, der 'Rückruf' vorschreibt, um weitergegeben zu werden. – His