Вот основной вопрос о многопоточности в Java: у меня очень большая изменяемая структура данных (точнее, дерево), и я понимаю, что если я хочу изменить эту структуру данных одновременно из двух разных потоков, мне нужно использовать замки и/или другие виды безопасности потоков.
Однако в моем случае двум потокам не требуется изменять структуру данных в одно и то же время; скорее, поток A, который обычно владеет структурой данных, должен временно передать последний потоку B, а поток B должен передать структуру данных обратно в поток A после выполнения некоторых длительных изменений на нем.
Безопасно ли это передавать эту изменчивую структуру данных между потоками, если она гарантирует, что потоки не изменяют данные одновременно?