🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes.java
Article #26219

Re: Nuevos Eventos

#26219
From: Jonathan Revusky
Date: Fri, 29 Jan 1999 00:00
66 lines
3371 bytes

Rehm wrote:
> 
> On Fri, 29 Jan 1999 12:12:48 +0100, Jonathan Revusky <jrevusky@jet.es>
> wrote:
> 
> >
> >
> >Rehm wrote:
> >>
> >> �Cual es la diferencia entre (1) y (2)?. Para que clonar.
> >>
> >> (1)   Enumeration enum = listeners.clone().elements();
> >> (2)   Enumeration enum = listeners.elements();
> >
> >El motivo ser�a para que el c�digo sea "thread-safe". Admites la
> >posibilidad de que en otro hilo de ejecuci�n, se agrega un listener,
> >mientras est�s dentro del m�todo fireXXXEvent.
> 
> Ok, yo lo habia hecho de otra forma:
> 
> public void addMiEventoListener(MiEventoListener listener) {
>    syncronized(listeners){
>         listeners.addElement(listener);
>   }
> }
> 
> public void removeMiEventoListener(MiEventoListener listener) {
>    syncronized(listeners){
>            listeners.removeElement(listener);
>   }
> }
> 

De hecho, si miras mi �ltimo mensaje, me di cuenta que todos los m�todos
de la clase Vector son sincronizados de todas formas. As� que podr�as
simplemente escribir: listeners.addElement(listener) y
listeners.removeElement(listener) sin hacer la sincronizaci�n expl�cita.
Si se tratase de un contenedor cuyos m�todos no fuesen sincronizados se
tendr�a que pensarlo.

> 
> De esta forma seguiria siendo "thread-safe", no?

Es m�s o menos thread-safe en todo caso, pens�ndolo, ya que todos los
m�todos de Vector son sincronizados. Aun y as�, creo que el c�digo que
te di (que yo hab�a adaptado para mis propios usos de alg�n ejemplo
ajeno) es la soluci�n m�s general. Lo que haces con el clone() es que
cada m�todo fireXXXEvent tiene su propia enumeraci�n de listeners. Es
decir, trabaja con una copia de la lista de listeners. Eso permite que
otro thread agregue o quite un listener de la lista sin afectar un
fireXXXEvent que ya est� en marcha en otro thread. Este �ltimo podr�a
quiz� introducir alg�n comportamiento raro o incluso indeterminista en
tu c�digo, si me entiendes... Bueno, tambi�n lo que ocurre es que en la
mayor�a de casos, quiz�, todas estas consideraciones no tendr�n ninguna
importancia, ya que todo ocurrir� en el mismo thread. Pero intent�
ofrecer una soluci�n general, y una soluci�n general tendr�a que ser
thread-safe.

Jonathan Revusky
-- 
Java and Delphi Consulting
Make your .class files double-clickable
with SmartJ
http://www.bigfoot.com/~crystalline.solutions
Technical Details
Message-ID: <36B1FEC3.A1561149@jet.es>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <36a31f4f.20082697@news.bcn.ttd.net> <36A46E20.61C8123F@jet.es> <36a4978e.39892782@news.bcn.ttd.net> <36A4A2A6.1D5D3AD6@jet.es> <36b16f1c.1030852@news.mad.ttd.net> <36B197B0.D67929D2@jet.es> <36b1a3e1.14539066@news.mad.ttd.net>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: 1116f3,9c6533ba9b909cd5
X-Google-Attributes: gid1116f3,public
From: Jonathan Revusky <jrevusky@jet.es>
Subject: Re: Nuevos Eventos
Date: 1999/01/29
Message-ID: <36B1FEC3.A1561149@jet.es>
X-Deja-AN: 438428674
Content-Transfer-Encoding: 8bit
References: <36a31f4f.20082697@news.bcn.ttd.net> <36A46E20.61C8123F@jet.es> <36a4978e.39892782@news.bcn.ttd.net> <36A4A2A6.1D5D3AD6@jet.es> <36b16f1c.1030852@news.mad.ttd.net> <36B197B0.D67929D2@jet.es> <36b1a3e1.14539066@news.mad.ttd.net>
X-Accept-Language: en
Content-Type: text/plain; charset=iso-8859-1
X-Complaints-To: usenet@lola.ctv.es
X-Trace: lola.ctv.es 917634817 17985 195.55.162.159 (29 Jan 1999 18:33:37 GMT)
Organization: CTV/JET
Mime-Version: 1.0
Reply-To: jrevusky@bigfoot.com
NNTP-Posting-Date: 29 Jan 1999 18:33:37 GMT
Newsgroups: es.comp.lenguajes.java