Article View: es.comp.lenguajes.java
Article #26219Re: Nuevos Eventos
From: Jonathan Revusky
Date: Fri, 29 Jan 1999 00:00
Date: Fri, 29 Jan 1999 00:00
66 lines
3371 bytes
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-mailReferences:
<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