Fabio Ramon wrote:
> 
> N�o sei se alguem ja sugeriu isso, mas tem uma solucao que permite continuar
> invocando o construtor de sua classe sem parametros  e inicializa a instancia
> interna. O unico problema dessa solucao e' que provavelmente nao e'
> thread-safe, embora tentei ao maximo tomar este cuidade com um lock (mais
> acho que nao e' suficiente. Se alguem tiver alguma sugestao...). Ai vai:
> 
> import java.io.*;
> 
> class MessageOutputStream extends ObjectOutputStream {
>   private static ByteArrayOutputStream temp;
>   private static Object lock = new Object();
> 
>   // Your _bos
>   private ByteArrayOutputStream _bos;
> 
>   static OutputStream getTemp() {
>     synchronized (lock) {
>        return temp = new ByteArrayOutputStream();
>     }
>   }
> 
>   public MessageOutputStream() throws IOException  {
>      super(getTemp());
>      _bos = temp;
>   };
> 
>   public static void main(String[] args) throws IOException  {
>      MessageOutputStream m = new MessageOutputStream();
>   }
> }

        Na verdade ainda h� uma falha nesta solu��o, porque da forma
como o lock est� sendo utilizado, ele n�o � suficiente para tornar a
solu��o thread-safe. Para isso, seria preciso proteger todo o
construtor da classe ao inv�s de apenas o m�todo getTemp(), porque o
caso de corrida cr�tica acontece entre a altera��o de temp em
"temp = new ByteArrayOutputStream()" e o acesso em "_bos = temp". O
problema � que Java n�o aceita "synchronized" antes da chamada ao
super(), ent�o n�o tem muito jeito.

        De qualquer forma, eu j� tinha descartado mesmo essa op��o
de usar um mecanismo de lock porque isso prejudicaria a performance
do sistema desnecessariamente.

        Bem, eu j� tinha at� abandonado esse problema e adotado a
solu��o do Frederico mesmo, mas j� que o assunto ressurgiu, acho
que vou pensar nisso mais um pouco para ver no que d�.

        Um abra�o,

Einar Saukas
Technical Consultant
Summa Technologies, Inc.
http://www.summa-tech.com

    --------------------------- LISTA SOUJAVA ---------------------------
    http://www.soujava.org.br  -  Sociedade de Usu�rios Java da Sucesu-SP
    [para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
    ---------------------------------------------------------------------

Responder a