[解決済み] ArrayBlockingQueueで、なぜ最終メンバーフィールドをローカル最終変数にコピーするのですか?
2023-06-17 09:15:30
質問
で
ArrayBlockingQueue
で、ロックを必要とするすべてのメソッドは、ロックをローカルの
final
を呼び出す前に
lock()
.
public boolean offer(E e) {
if (e == null) throw new NullPointerException();
final ReentrantLock lock = this.lock;
lock.lock();
try {
if (count == items.length)
return false;
else {
insert(e);
return true;
}
} finally {
lock.unlock();
}
}
をコピーする理由はあるのでしょうか?
this.lock
をローカル変数
lock
フィールドが
this.lock
が
final
?
さらに、ローカルコピーの
E[]
に作用する前に
private E extract() {
final E[] items = this.items;
E x = items[takeIndex];
items[takeIndex] = null;
takeIndex = inc(takeIndex);
--count;
notFull.signal();
return x;
}
finalフィールドをローカルのfinal変数にコピーする理由はあるのでしょうか?
どのように解決するのですか?
このクラスの著者であるDoug Leaが好んで使う、極端な最適化です。以下は 最近のスレッド の投稿をご覧ください。
を投稿しています。
...ローカルにコピーすることで最小の バイトコードを生成し、低レベルのコードでは、マシンに少し近いコードを書くのが良い を書くのは良いことです。
関連
-
XMLファイル操作時のjava.util.NoSuchElementExceptionを解決する方法。
-
Junitのユニットテストはjava.lang.Testを報告します。
-
eclipse にリソースリーク:'in' が閉じない
-
Server Tomcat v9.0 Server at localhost の起動に失敗しました。
-
Web Project JavaでPropertiesファイルを読み込むと、「指定されたファイルがシステムで見つかりません」というソリューションが表示されます。
-
Java JDKのダイナミックプロキシ(AOP)の使用と実装の原理分析
-
[解決済み] Spring の @Autowired フィールドが NULL になっているのはなぜですか?
-
[解決済み] Javaリフレクションを用いた静的なプライベートfinalフィールドの変更
-
[解決済み】別のメソッドで定義された内部クラス内の非終端変数を参照することはできません。
-
[解決済み] メソッドのパラメータやローカル変数にfinalを使用するのはどのような場合ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
実行中にEclipseがポップアップする A Java Exception has occurred
-
NullPointerException - java.lang.
-
undefined[sonar] sonar:デフォルトのスキャンルール
-
java.sql.SQLException: executeQuery()でデータ操作文を発行できません。
-
FindBugの使用概要
-
maven レポート エラー 解決不可能な親POM
-
Junitのユニットテストエラー
-
コンストラクタDate()が未定義である問題
-
代入の左辺は変数でなければならない 解答
-
WeChat小プログラム Bluetooth通信 Bluetoothモジュールデモ