🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

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

#149855
From: Witold Szczerba
Date: Thu, 25 Mar 2010 21:39
53 lines
4024 bytes
On Mar 25, 5:38 pm, keef <a...@a.com> wrote:
> Teraz pytanie:
> Jeśli wątek jest 'pracownikiem', który może zostać całkowicie ukryty -
> klasa używająca obiektu nawet nie musi wiedzieć, że za interfejsem chowa
> się wątek - to czy dobrze jest go 'łączyć' na stałe z klasą, w taki
> sposób, aby WSZYSCY widzieli, że tam jest osobny wątek?

Dobrze kombinujesz, to nie jest dobry pomysł, aby cokolwiek
dziedziczyć bez powodu.

> O co mi chodzi?
>
> Dlaczego pisać "extends Thread" lub nawet (w publicznej klasie)
> "implements Runnable", kiedy jest to szczegół implementacyjny, o którym
> klienci mogą nie wiedzieć?

Zauważ, że można zrobić "...extends Thread implements Cośtam..." i
dalej w świat "puścić" ten obiekt jako Cośtam. Nikt nie musi wiedzieć,
że to dziedziczy po Thread, będzie widać tylko metodę/metody z
Cośtam.

> Na poparcie moich wypocin, mogę przedstawić interfejs(y):
> 1. Executor (i ExecutorService), których zadaniem jest ukrywanie wątków

Ich zadaniem nie jest ukrycie wątków tylko odseparowanie spraw
związanaych z uruchamianiem wątków, zarządzeniem pulami wątków itp.
sprawami, a implementacją logiki, która będzie w tych wątkach
odpalana.

> 2. Interfejs Runnable, który powinien być używany ZAMIAST dziedziczenia
> po klasie Thread (próba rozdzielenia implementacji od specyfikacji)

Runnable nie powstał tylko po to, stosuje się go w wielu wielu wielu
miejscach, łącznie z tymi, które sam w swoim programie człowiek pisze
i od czasu gdy potrzebuje np. opakować metodę w obiekt, żeby można ją
było przekazać jako parametr.

> I teraz dochodzimy do zasadniczej kwestii. Jak wydzielić interfejs,
> który przedstawia postawiony problem w sposób niezależny od wątków? Da
> się? A jak się nie da, to pytanie brzmi dlaczego? Być może problem leży
> w koncepcji...

Nie zawsze można to zrobić, nie zawsze warto to robić, czasami dobrze
jest zostawić wolną rękę implementacjom - w końcu kto powiedział, że
jak implementujemy interfejs to nie możemy dodać coś od siebie i to
udokumentować. Nie zawsze jest tak, że różne implementacje tego samego
interfejsu są wzajemnie wymienne w naszym kodzie - i to dobrze. Weźmy
taki przykład: interfejs Map - możemy mieć obiekt HashMap, ale możemy
mieć też implementację zwracaną przez #Collections.synchronizedMap  -
każdy z nich możemy przedstawić jako Map, ale działają inaczej, a
interfejs Map nic na ten temat nie mówi. Z drugiej strony mamy
interfejs np. BlockingQueue, który jasno wspomina jak to wszystko
powinno działać biorąc pod uwagę wątki.
Technical Details
Message-ID: <343ca24e-feae-4bf0-ba6c-ea59a4884c35@x12g2000yqx.googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.glorb.com!npeer03.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!postnews.google.com!x12g2000yqx.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>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.glorb.com!npeer03.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!postnews.google.com!x12g2000yqx.googlegroups.com!not-for-mail
From: Witold Szczerba <pljosh.mail@gmail.com>
Newsgroups: pl.comp.lang.java
Subject: Re: czy
 wątki mogą świadczyć usługi?
Date: Thu, 25 Mar 2010 14:39:51 -0700 (PDT)
Organization: http://groups.google.com
Lines: 70
Message-ID: <343ca24e-feae-4bf0-ba6c-ea59a4884c35@x12g2000yqx.googlegroups.com>
References: <4c3b4f20-3f62-4e54-9e3c-298e4ea6c3e5@g10g2000yqh.googlegroups.com>  <ho5jpd$gir$1@news.onet.pl> <hog3hh$s2g$1@news.task.gda.pl>
NNTP-Posting-Host: 79.184.133.105
Mime-Version: 1.0
X-Trace: posting.google.com 1269553191 25966 127.0.0.1 (25 Mar 2010 21:39:51 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Thu, 25 Mar 2010 21:39:51 +0000 (UTC)
Complaints-To: groups-abuse@google.com
Injection-Info: x12g2000yqx.googlegroups.com; posting-host=79.184.133.105;  posting-account=gnHnDQoAAABAt-cdgg6OG0gvpEhXZTSx
User-Agent: G2/1.0
X-HTTP-UserAgent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.2)  Gecko/20100316 Firefox/3.6.2,gzip(gfe),gzip(gfe)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit