En las últimas versiones de Java (Java 5 +) se ha añadido una nueva clase que complementa a StringBuffer y String es el caso de la clase StringBuilder . Anteriormente a su llegada la clase String tenía la ventaja de ser una clase “thread safe” . Es decir al tratarse de una clase que genera objetos inmutables no había que preocuparse de cuantos hilos accedieran a ella. Sin embargo la otra clase con la que hemos trabajado StringBuffer es una clase cuyos métodos son “synchronized” es decir solo se admite que un único Thread acceda a ella de forma directa .
Hay situaciones en las cuales esto es positivo pero hay otras muchas en las que no es necesario .Por ello Java incluye una clase identica a StringBuffer pero que no esta sincronizada y se denomina StringBuilder . En la mayoria de los casos será mas util utilizar esta clase que la anteriormente comentada.
Vamos a ver un ejemplo en código:package com.arquitecturajava; public class Principal03 { public static void main(String[] args) { StringBuilder cadena=new StringBuilder(); long numero1= System.currentTimeMillis(); for(int i=0;i<10000;i++) { cadena.append("hola"); cadena.append("que"); cadena.append("tal"); cadena.append("estas"); } long numero2=System.currentTimeMillis(); System.out.println(numero2-numero1); } }
Como puedo aprender mas de este tema soy nueva en java
En la pestaña de mis libros , en mi blog tienes acceso gratuito a mi libro de Java EE que te ayudará con conceptos generales:)
[…] artículos relacionados: Java StringBuilder , Java WorkFlows , Java […]
[…] artículos relacionados: Java Strings , StringBuilder […]
Hola Cecilio: excelentes blogs (estoy leyendo todos tus articulos)
Quedé desconcertado con el ejemplo (aclaro no tengo experiencia en Java) porque no veo donde esta la concurrencia. No es el ejemplo donde aparece paralell() …. no se si podrias explicarme porque aqui es peligros usar StringBuffer
Gracias!
Hay situaciones en las que dos hilos(threads) pueden entrar a modificar a la vez un objeto StringBuilder y en ese caso se pueden dar situaciones en las que el contenido del StringBuilder termine por no ser el que queremos ya que un hilo pise al otro
[…] artículos relacionados : StringBuilder, String y Rendimiento , foreach vs […]
[…] String y StringBuilder […]
[…] String vs StringBuffer […]
Cecilio, con esto debo entender que no hay necesidad de utilizar StringBuffer en Ejb, ya que por “Naturaleza” estos ya son threadsafe. Estoy en lo correcto ??
No porque la diferencia entre threadsafe es entre las clases StringBuilder y StringBuffer .En un entorno en el que sabes que un ejb es threadsafe puedes usar sin problemas StringBuilder . Lo que no debieras usar para concatenar un gran conjunto de cadenas es String.