`selectorThread` starts in the construction of `org.apache.spark.network.ConnectionManager`, which may cause `writeRunnableStarted` and `readRunnableStarted` are uninitialized before them are used.
Indirectly, `BlockManager.this` also escape since it calls `new ConnectionManager(...)` and will be used in some threads of `ConnectionManager`. Some threads may view an uninitialized `BlockManager`.
In summary, it's dangerous and hard to analyse the correctness of concurrency. Such escape should be avoided.