Возможно ли также войти в бесконечный цикл при одновременной итерации и записи не более чем с одним параллельным писателем?
Я бы сказал осторожно, нет: эти бесконечные циклы возникают потому, что множественные циклыпотоки перемонтируют отношения между узлами и могут вносить противоречивые обновления. Один поток не будет конфликтовать с самим собой, поэтому такое перепутывание не будет происходить.
Однако я не уверен в этом - но мне не нужно: такойиспользование TreeMap
является нарушением документации:
Если несколько потоков обращаются к карте одновременно, и хотя бы один из потоков изменяет карту структурно, она должна быть синхронизирована извне.
Если внешняя синхронизация не выполняется, поведение не определено. Разработчики класса могут свободно реализовывать класс любым способом, который соответствует спецификации;и возможно, что один из способов может привести к бесконечному циклу.
Если вы столкнулись с бесконечным циклом в TreeMap
, это симптом, а не основная причина, а именно - несинхронизированный доступ к изменяемым данным. Это означает, что нет никакой гарантии, что значения, читаемые только для чтения, также являются правильными.