🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.java
Article #149861

Re: czy wątki mogą świadczyć usługi?

#149861
From: Maciej Sobczak
Date: Sat, 27 Mar 2010 22:06
91 lines
4828 bytes
On 27 Mar, 00:10, keef <a...@a.com> wrote:

> > Runnable sam w sobie nie ma nic wspólnego z wątkami, więc jego użycie
> > w definicji klasy nie sugeruje wielowątkowości. To jest jedynie
> > znacznik: "uwaga, instancje tej klasy można wywołać",

> Podobnie jak Serializable - również jest interfejsem znacznikowym.

Nie, to co innego.
Pisząc "znacznik" miałem na myśli, że ten interfejs wyraża pewną
"zdolność" (zresztą jak każdy inny interfejs, więc może bez sensu to
napisałem).
Natomiast Serializable jest znacznikiem rozpoznawanym przez kompilator
i to działa na innym poziomie. Prawdopodobnie gdyby anotacje były w
Javie od początku, to interfejsu Serializable by po prostu nie było,
bo to jest bardzo kiepski sposób na znacznikowanie czegokolwiek.

> Poza tym przeczytaj dokładnie o co chodzi - wyciąłeś ten tekst więc
> pozwól, że go wstawię:
>
> <ciach>
> (...)opakować metodę w obiekt, żeby można ją było przekazać jako parametr.
> </ciach>
>
> Nie czepiam się interfejsu Runnable. Pytam się, dlaczego ktoś używa tego
> samego rozwiązania we własnym kodzie?

Bo ma podobny use-case.

> Ponieważ uważam, że jakkolwiek
> pasuje do wątków, to inne jego zastosowania są wątpliwe

Pokazałem przykład z GUI.

> Czy nie lepiej jest użyć wzorca projektowego 'Komenda', który robi
> bardzo podobną rzecz, ale bez wiązania jej z wątkami?

Runnable niczego nie wiąże z wątkami, już pisałem.

> Równie dobrym
> wyjściem jest Callable<T>.

Jeśli chcesz coś zwracać.

> Oba nie wymagają rzutowania, w
> przeciwieństwie od Runnable ;-)

Jakiego rzutowania wymaga Runnable?
Zwłaszcza, że run() niczego nie zwraca?

> Pomimo tego, że możliwe jest, jak ktoś zaproponował, dziedziczenie po
> Thread, lub pisanie explicite "public interface MyFancyBussinesLogic
> extends Runnable", pytanie brzmi "po co tak robić?".

Dziedziczenie po Thread to faktycznie robienie wiochy, ale
MyFancyBusinessLogic może w ten sposób wyrazić swoją gotowość do bycia
wywołanym.

> Czy rzeczywiście
> klienci interfejsu MyFancyBussinesLogic muszą wiedzieć o wątkowości?

Nie ma tu mowy o wątkach.
(dlatego wycinam dalsze Twoje uwagi o wątkach)

> > Interfejs Runnable (jak i każdy inny) opiera się na użyciu
> > polimorfizmu, więc pytanie jest dziwne.
>
> Nie. Sam napisałeś - znacznik. Więc Runnable, Serializable opierają się
> na polimorfizmie bardzo słabo...

Runnable to prawdziwy interfejs z prawdziwą metodą, która jest
naprawdę definiowana przez klasę implementującą ten interfejs.
Polimorfizm pierwsza klasa.

> Podobnie 'Runnable' - łącząc interfejs Runnable z Twoją logiką
> (interface MyFancyBussinesLogic extends Runnable) łączysz wątkowość

Znowu nie. Runnable nie implikuje żadnej wielowątkowości.

> A dlaczego uważasz, że implementacja jednowątkowa jest zła tak bardzo,

Może być bardzo dobra. Dlatego bardzo dobrym przykładem jest
invokeLater ze Swinga - ona jest *właśnie* po to, żeby dopasować się
do jednowątkowej implementacji jakiegoś kawałka systemu.

> Mam nadzieję, że przedstawiłem swój punkt widzenia :-)

Jak najbardziej.

--
Maciej Sobczak * http://www.inspirel.com
Technical Details
Message-ID: <ab63e177-16fc-45e3-953c-ff5249749322@l36g2000yqb.googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!goblin1!goblin.stu.neva.ru!postnews.google.com!l36g2000yqb.googlegroups.com!not-for-mail
References: <4c3b4f20-3f62-4e54-9e3c-298e4ea6c3e5@g10g2000yqh.googlegroups.com> <ho5jpd$gir$1@news.onet.pl> <hog3hh$s2g$1@news.task.gda.pl> <343ca24e-feae-4bf0-ba6c-ea59a4884c35@x12g2000yqx.googlegroups.com> <hoigb3$lrn$1@news.task.gda.pl> <hoiitj$c8i$1@news.onet.pl> <hoinn7$61u$1@news.task.gda.pl> <a0c376f6-f4ed-42ac-a8f8-fa6f2081e22c@j21g2000yqh.googlegroups.com> <hojess$5ct$1@news.task.gda.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!goblin1!goblin.stu.neva.ru!postnews.google.com!l36g2000yqb.googlegroups.com!not-for-mail
From: Maciej Sobczak <see.my.homepage@gmail.com>
Newsgroups: pl.comp.lang.java
Subject: Re: czy
 wątki mogą świadczyć usługi?
Date: Sat, 27 Mar 2010 15:06:23 -0700 (PDT)
Organization: http://groups.google.com
Lines: 104
Message-ID: <ab63e177-16fc-45e3-953c-ff5249749322@l36g2000yqb.googlegroups.com>
References: <4c3b4f20-3f62-4e54-9e3c-298e4ea6c3e5@g10g2000yqh.googlegroups.com>  <ho5jpd$gir$1@news.onet.pl> <hog3hh$s2g$1@news.task.gda.pl>  <343ca24e-feae-4bf0-ba6c-ea59a4884c35@x12g2000yqx.googlegroups.com>  <hoigb3$lrn$1@news.task.gda.pl> <hoiitj$c8i$1@news.onet.pl>  <hoinn7$61u$1@news.task.gda.pl> <a0c376f6-f4ed-42ac-a8f8-fa6f2081e22c@j21g2000yqh.googlegroups.com>  <hojess$5ct$1@news.task.gda.pl>
NNTP-Posting-Host: 85.1.23.86
Mime-Version: 1.0
X-Trace: posting.google.com 1269727583 29439 127.0.0.1 (27 Mar 2010 22:06:23 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Sat, 27 Mar 2010 22:06:23 +0000 (UTC)
Complaints-To: groups-abuse@google.com
Injection-Info: l36g2000yqb.googlegroups.com; posting-host=85.1.23.86;  posting-account=bMuEOQoAAACUUr_ghL3RBIi5neBZ5w_S
User-Agent: G2/1.0
X-HTTP-UserAgent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US;  rv:1.9.2) Gecko/20100115 Firefox/3.6,gzip(gfe)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit