基本的なレベルで、以下の状況でスレッドに渡されるローカル変数に何が起こるかを理解しようとしています。 delete
メソッドを持つsomeObject
でクリーンアップアクションが発生する必要があります。このメソッドはsomeObjectのインスタンスをメンバーであるid
で削除する外部APIを呼び出します。引数を新しいスレッドに渡すときのローカル変数参照とGC
public interface Deleteable {
public delete()
}
public SomeClass implements Deleteable {
int id;
public void delete() {
HttpApiCall.deleteById(this.id);
}
}
SomeClass someObject = null;
for(i = 0; i < 3; i++) {
// simple loop to illustrate problem
someObject = new SomeClass();
Runtime.getRuntime()
.addShutdownHook(new Thread(someObject::delete));
}
プログラムが実行されている間、スレッドが削除を呼び出せるようになる前にSomeClassのインスタンスの一部がGC'edされますか?各スレッドは、新しく作成された独自のコピーを受け取るか、最後に設定した値のsomeObject
で動作しますか?
私はvolatile
キーワードについて少し読んでいますが、私はここで私を助けてくれるのか分かりません。
シャットダウンフックが呼び出されない場合、どの程度深刻ですか?それは可能ですから。 – Kayaman
シャットダウンフックが呼び出されない状況についてさらに詳しく説明できますか? – ferahgo
これはjavadocのすべてです。 – Kayaman