Cette fonction est parfaitement sécurisée.
Si vous y pensez... imaginez ce qui se passerait si c'était différent. Chaque fonction habituelle aurait des problèmes de threading si elle n'était pas synchronisée, donc toutes les fonctions API du JDK devraient être synchronisées, car elles pourraient potentiellement être appelées par plusieurs threads. Et comme la plupart du temps l'application utilise une API, les applications multithreadées seraient effectivement impossibles.
C'est trop ridicule pour y penser, alors juste pour vous : Les méthodes ne sont pas threadsafe s'il y a une raison claire pour laquelle il pourrait y avoir des problèmes. Essayez de toujours penser à ce qui se passerait s'il y avait plusieurs threads dans ma fonction, et ce qui se passerait si vous aviez un step-debugger et que vous fassiez avancer, étape après étape, le premier... puis le deuxième thread... peut-être le deuxième encore... y aurait-il des problèmes ? Si vous en trouvez un, c'est qu'il n'est pas thread safe.
Sachez également que la plupart des classes de collection Java 1.5 ne sont pas threadsafe, sauf celles qui sont indiquées, comme ConcurrentHashMap.
Et si vous voulez vraiment vous plonger dans ce domaine, examinez de près le mot-clé volatile et TOUS ses effets secondaires. Jetez un coup d'œil aux classes Semaphore() et Lock(), ainsi qu'à leurs amis de java.util.Concurrent. Lisez toute la documentation API relative à ces classes. Cela vaut la peine d'apprendre et c'est aussi satisfaisant.
Désolé pour cette réponse trop élaborée.