2013-04-12 2 views
2

Java предоставляет три класса манипуляции с строками String,StringBuilder and StringBuffer. В котором StringBuilder не синхронизируется и StringBuffer синхронизируется.Можно ли синхронизировать построитель строк?

Так что я просто хочу спросить, есть ли возможность для синхронизации StringBuilder.

+1

Когда StringBuffer уже существует, вы хотите синхронизировать StringBuilder ?? –

+0

Что именно вы хотите сделать? –

+0

мы можем синхронизировать любой объект. – ZhongYu

ответ

4

Конечно, просто синхронизируйте извне, используя блоки synchronized или вручную, когда вы получаете доступ к StringBuilder из нескольких потоков.

Но зачем вам это нужно? У вас уже есть StringBuffer.

0

Если вы знаете, что StringBuffer синхронизирован, зачем вам синхронизировать StringBuilder?

Я должен вы можете расширить StringBuilder и создать синхронизированный метод, который вызывает ООН-синхронизируются методы

2

Цитата

Этот класс [StringBuilder] предоставляет API, совместимый с StringBuffer, но нет гарантия синхронизации. Этот класс - , предназначенный для использования в качестве замены для StringBuffer в местах , где строковый буфер использовался одним потоком (как обычно это ). Там, где это возможно, рекомендуется использовать этот класс вместо StringBuffer, поскольку он будет работать быстрее при большинстве реализаций .

0

Да, вы можете с помощью запирающего механизма как synchronized метода или блока или Reentrantlock.

StringBuffer уже существует, рекомендуется использовать его.

0

Конечно. Вы можете синхронизировать StringBuilder, но StringBuffer уже присутствует в API, который синхронизирован.

StringBuffer имеет все методы синхронизированных методы манипулирования данных (insert(), append() и т.д.), а также методы чтения данных (indexOf(), subSequence(), toString() и т.д.).

Синхронизируя, только определенный блок кода, который вы хотите быть безопасным потоком при использовании StringBuilder, я думаю, вы могли бы получить некоторую производительность.

Смежные вопросы