Безопасни ли са Spring контролерите за нишки?

Пиша частен полезен метод в Spring Controller.

Трябва да използвам StringBuffer или StringBuilder. Първият е безопасен за нишки, вторият не е, но вторият е много по-бърз.

По принцип изглежда така:

private String buildTextToDisplay() {
    StringBuffer sb = new StringBuffer();
    sb.append( ... );
    return sb.toString();
}

Очевидно не искам две сесии да извикват това едновременно и да връщат боклука.


person EdgeCase    schedule 26.08.2012    source източник
comment
може да е полезно: Как да докажа програмно, че StringBuilder не е безопасен за нишки?   -  person Andrew Tobilko    schedule 19.02.2018


Отговори (3)


Тъй като sb е локална променлива, не е необходимо да е безопасна за нишки. (Всяка нишка ще има собствена препратка към уникален StringBuilder, нали?)

person aioobe    schedule 26.08.2012

Безопасността на нишките на StringBuffer е полезна, когато се използва като членска променлива на клас. Но ако това е локална променлива, тогава StringBuilder е по-добре, защото няма концепция за безопасност на нишката за локална променлива.

person Vikdor    schedule 26.08.2012

Ще трябва да използвате конструктора по много специфичен начин, за да забележите разликата в скоростта между StringBuilder и StringBuffer. В 99% от случаите на употреба няма забележима разлика, а при съвременните JIT тя е 100% поради елизия на заключване.

Но, както други забелязват, вие сте свободни да използвате StringBuilder във вашия случай.

person Marko Topolnik    schedule 26.08.2012