次のコード ブロックがあるとします。
int version;
String content;
synchronized (foo) {
version = foo.getVersion();
content = foo.getContent();
}
// Do something with version and content
その目的は、いくつかのオブジェクト foo のバージョンとコンテンツのスレッドセーフな一貫したビューを取得することです。
このようにもっと簡潔に書く方法はありますか?
synchronized (foo) {
int version = foo.getVersion();
String content = foo.getContent();
}
// Do something with version and content
問題は、このバージョンでは、変数が (同期された) 中括弧のスコープ内で定義されているため、ブロックの外部にアクセスできないことです。したがって、問題は次のとおりです。これらの中括弧を新しいスコープ ブロックを定義しないものとしてマークしたり、変数をそこで宣言することなく親スコープに属するものとしてマークしたりする方法はありますか?
(注: を単に同期ブロックに引き込みたくはありません。)// Do something with version and content