これについての私の理解では、synchronizedブロックは、そのブロックが終了するまで他のスレッドがアクセスできないようにするということです。つまり、現在実行中のクラス (?) によって保持されているロックを介して、それまで保留にされます。
したがって、リストを反復処理し、その直後にそのリストをfor呼び出すブロックをブロックでラップします。これら 2 つの操作セットの間に他のスレッドをリストに追加する余裕がないためです。これは、次のように言うドキュメントに従っています。clear()synchronized
ユーザーは、返されたコレクションを反復するときに手動で同期することが不可欠です...
addただし、リストにいるときに同じことをする必要があるかどうかはわかりません。私の場合、add異なるスレッドからの操作の順序は重要ではないため、そうではないと思います。私が確信が持てないのは、synchronized 変更解除操作が悪影響を与える可能性があるかどうかだと思いますか?