Основное отличие StringBuilder от StringBuffer в контексте многопоточности заключается в том, что StringBuffer является синхронизированным и потокобезопасным, а StringBuilder — нет. 12
Это означает, что если несколько потоков одновременно обращаются к одному и тому же объекту StringBuffer, они не будут мешать друг другу. 1 С другой стороны, если несколько потоков одновременно обращаются к одному и тому же объекту StringBuilder, существует риск повреждения данных и других проблем. 1
Таким образом, StringBuffer стоит использовать в приложениях с многопоточной обработкой, где объект данного класса может меняться в различных потоках. 1 Если же потокобезопасность не требуется, то лучше выбрать StringBuilder. 2
При этом в силу своей потокобезопасности StringBuffer работает медленнее, чем StringBuilder, поскольку затрачивает дополнительные ресурсы на поддержание синхронизации. 2