last はメンバー変数です。メソッド内で直接使用せずに、最後のローカル変数に代入してみてはいかがでしょうか?
typecho2017-06-23 09:16:09
コードを見た
リーリーlastは一時的なものですよね?ローカルのfinal変数に代入すれば、lastを使うたびに値をチェックする必要がなくなりますよね?
巴扎黑2017-06-23 09:16:09
その理由の 1 つは、スレッドの安全性を確保するためです。このメソッドが l 変数を使用せずに最後のメンバーを直接参照すると仮定すると、判定は if(this.last == null)
。如果通过判断之后的瞬间,last 被赋值成了 null,那么下一句 unlinkLast(this.last)
となり不明な結果が発生します。