Article View: pl.comp.lang.java
Article #149855Re: czy wątki mogą świadczyć usługi?
From: Witold Szczerba
Date: Thu, 25 Mar 2010 21:39
Date: Thu, 25 Mar 2010 21:39
53 lines
4024 bytes
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-mailReferences:
<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