Worauf muss man bei multi-threading programmierung in Java besonders achten?
Kurz: Auf das gleiche, wie bei anderen Sprachen auch.
Du könntest es mal mit den synchronisierten Containern versuchen:
http://download.oracle.com/javase/1.5.0/…ge-summary.html
Dass die normalen Collections nicht MT safe sind halte ich für sinnvoll, da nicht jeder den Overhead bezahlen möchte, was ein solches System kostet. Wenn man es braucht, dann kann man ja die geeigneten Collections benutzen.
Multithreading Sicherheit im nachhinein in ein Projekt bringen ist eher ungünstig, da man einige Voraussetzungen, auf die man sich mal verlassen hat nicht mehr verlassen kann, was dann unter Umständen das ganze Projekt betreffen kann. Ist bei Java weniger hart, wie z.B bei C, aber auch da präsent. Auf jeden Fall ist eine Eingrenzung keine schlechte Idee.
Konkret bei deinem Problem sollte es mit einer synchronisierten Liste schon funktionieren. Producer/Consumer ist eigentlich mittlerweilen relativ gut möglich.