In IdeFICS (mijn grails gebaseerde online chess client) had ik last van ConcurrentModificationExceptions
in mijn code omdat de ene thread nieuwe waardes in de console buffer schreef terwijl de applicaties ze las. Niet geheel verwonderlijk natuurlijk. Ik heb dit probleem nu opgelost door gebruik te maken van de CopyOnWriteArrayList
class die in java 5 in het concurrent package is geïntroduceerd. Deze class is een thread-safe variant van de standaard ArrayList, die ik hiervoor gebruikte. Het werkt prima! Scheelt een hoop werk om dit op deze manier op te lossen.
Nieuwe code in de FreeChessService:
def buffer = new CopyOnWriteArrayList()
def gameMoves = new CopyOnWriteArrayList()
Ik wil ter leering ende vermaak ga ik nog even naar de source van deze class kijken.