какая польза от синхронизированного строкового буфера - PullRequest
0 голосов
/ 28 июня 2018

Как использовать синхронизируемые методы StringBuffer. Пока один поток изменяет строковый буфер, другие потоки не могут найти практическое применение и использовать его

Ответы [ 4 ]

0 голосов
/ 15 июля 2018

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

Примеры: когда у меня есть построитель строк с начальным значением «Java» и если thread1 пытается добавить «is» в построитель строк, thread2 пытается добавить «поддерживаемый», есть вероятность, что строитель строк может стать либо «Java is», либо «Java поддерживает», либо «Java поддерживается», вызывая несоответствия данных.

В случае строкового буфера, если thread1 пытается добавить «is», thread2 будет ждать, так что он может стать только «Java поддерживается»

0 голосов
/ 28 июня 2018

StringBuffer используется, если у вас есть объект со значениями, которые могут изменяться и модифицироваться несколькими потоками. Поэтому синхронизация в строковом буфере будет полезна при множественных изменениях.

0 голосов
/ 28 июня 2018

Каковы практические применения и применения StringBuffer?

Практически нет, поэтому его заменили на StringBuilder.

Это устаревший класс со старых времен, и он не устарел, потому что в нем много кода.

например. хотя StringBuilder был добавлен в Java 1.5, класс регулярных выражений Matcher, который был добавлен в Java 1.4, не получил поддержку StringBuilder до Java 9 (см. appendReplacement ).

Как говорит Javadoc :

Начиная с выпуска JDK 5, этот класс был дополнен эквивалентным классом, предназначенным для использования одним потоком, StringBuilder. Класс StringBuilder обычно следует использовать вместо этого, поскольку он поддерживает все те же операции, но он быстрее, поскольку не выполняет синхронизацию.

0 голосов
/ 28 июня 2018

Я рассматриваю безопасность потока как оптимизацию правильности (избегание неопределенного поведения). В многопоточных средах использование StringBuffer будет, по крайней мере, поточно-безопасным (корректно с точки зрения отсутствия гонки или несинхронизированного доступа)

Строковые буферы безопасны для использования несколькими потоками.

Это связано с расходами на производительность, которые могут повлиять или не повлиять на вас.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...