Classes unsynchronized em ambiente web

0 respostas
TiagoW

Ola a todos,

Estou com uma dúvida a respeito do uso de classes unsynchronized em ambientes multithread.

Por exemplo:
As classes StringBuffer e StringBuilder.
StringBuffer é synchronized, e portanto thread-save. Por causa disso a recomendação é de que em ambientes multithread como um container web seja usado StringBuffer ao invés de StringBuilder.

A questão é: Isso se aplicaria a qualquer coisa que rode dentro do servidor web, ou apenas a códigos compartilhados?

Por exemplo no seguinte Servlet:

public class TesteServlet extends HttpServlet {
  private StringBuffer compartilhado = new StringBuffer();

  public void doGet(HttpServletRequest solicitacao, HttpServletResponse resposta) throws ServletException, IOException {
      StringBuilder local = new StringBuilder();
  }
}

Neste exemplo, o atributo “compartilhado” com certeza têm de ser StringBuffer, já que ele será compartilhado entre as várias threads que acessam este servlet, e portanto têm de ser thread-safe.
Mas e a variável “local”?
A princípio, cada thread teria sua própria instância dessa variável e portanto ela poderia ser uma StringBuilder para evitar o overhead de lidar com sincronização, correto?
E no caso dos ManagedBeans do JSF? Se aplicaria a mesma lógica?

Desculpem-me se a pergunta foi simplória, mas essa é uma questão que pode afetar a performance dos sistemas web, por isso julgo-a bem relevante.

Criado 21 de setembro de 2009
Respostas 0
Participantes 1