Hola a todos !! Paso a dejar la respuesta del ejercicio CU00911C del manual pdf de programación java avanzada. Desde ya muchas gracias. Un saludo, Luis
EJERCICIO
En esta entrega hemos podido ver lo siguiente: StringBuilder puede ofrecer resultados no consistentes en una ejecución multihilo (concurrente, con distintos “subprogramas” ejecutándose simultáneamente) ya que sus métodos no son sincronizados.
Busca información en internet y trata de poner un ejemplo de cómo podría generarse una inconsistencia en programación multihilo. No hace falta que escribas código, únicamente es necesario describir en unas pocas líneas (como si estuvieras explicándoselo a un amigo) la idea o situación.
La clase String es una clase no modificable. Esto quiere decir que cuando se modifica un String se crea un nuevo objeto String modificado a partir del original y el recolector de basura es el encargado de eliminar de la memoria el String original, eso origina un uso mayor de los recursos.
En general decidiremos cuando usar String, StringBuilder o StringBuffer según lo siguiente:
-Usaremos String si la cadena de caracteres no va a cambiar.
-Usaremos StringBuilder si la cadena de caracteres puede cambiar
y solamente tenemos un hilo de ejecución.-Usaremos StringBuffer si la cadena de caracteres puede cambiar y tenemos varios hilos de ejecución.
StringBuilder (llegó con Java 5), no es síncrona, lo que significa que puede haber problemas si a una variable la acceden diferentes threads. Sin embargo, para la mayoría de las aplicaciones (donde se ejecuta un solo hilo) supone una mejora de rendimiento sobre StringBuffer.
La diferencia entre un StringBuilder y un StringBuffer es que un StringBuffer provee métodos sincronizados por lo que es seguro usarlos en un ambiente multi-hilos. Un StringBuffer se comporta de manera consistente con el orden de las llamadas a los métodos hechas por cada hilo.
StringBuilder es rápido ya que no es seguro al utilizarse en los hilos,
no es thread safe.
Con varias ejecuciones, los tiempos son constantemente menores para el StringBuilder. Por ejemplo, concatenar 100000 cadenas con:
.String: 300000 milisegundos
.StringBuffer: 30 milisegundos
.StringBuilder: 15 milisegundos
(los valores dependen del ordenador usado-es a modo de ejemplo)