🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

synchronizacja wątków

#125
From: Piotr Piatkowski
Date: Sun, 01 Dec 1996 01:27
44 lines
2638 bytes
Spodobały mi się ostatnio wątki w Javie, pisząc projekt postanowiłem 
zatem je wykorzystać i zrobiłem program wielowątkowy. Jednym z wątków
jest coś co nazywam ServerReader, co czyta dane z serwera, wrzuca do 
bufora (Vector) i udostępnia innym wątkom. Chodzi o taki inteligentny
bufor - ponieważ dane z serwera są wykorzystywane w sposób ciągły, a 
serwer wysyła je porcjami między którymi pojawiają się dłuższe 
przerwy.

I teraz tak - żeby nie zajmować niepotrzebnie czasu procesora, w 
momencie gdy czytacz stwierdzi że bufor jest pełny (czyli nie ma nic 
do roboty), robi po prostu Thread.currentThread.suspend().
Inny wątek, wywołujący funkcję ServerReader.getNextLine() po 
odczytaniu z bufora linii (czyli zrobieniu miejsca na kolejną) 
wywołuje ServerReader.thread.resume(), po czym ServerReader może 
zapisać nowe dane do bufora (bufor oczywiście ma strukturę FIFO).

W zasadzie jest to klasyczny przykład producent/konsument, ze 
skończonym buforem.

Działa to bardzo ładnie, ale jest jeden problem - Netscape strasznie 
się pluje z komunikatami:

Warning: Thread.suspend() was called; Navigator deadlock might result

Wydaje mi się że pluje się niesłusznie, bo suspend robię na własnym 
wątku a nie na wątku głównym appleta (kiedy to faktycznie mógłbym 
doprowadzić do deadlocku Navigatora). Niemniej jednak bardzo mnie to 
denerwuje. I tutaj pytanie - czy ktoś widzi inne rozwiązanie, np. z 
zastosowaniem funkcji wait()/notify()? Jak dla mnie działanie 
wait/notify to ciągle "heavy wizardry"... Odnoszę wrażenie jakby 
te funkcje nie były do końa udokumentowane, albo raczej są, ale 
wszędzie po trochu i trochę inaczej :-)

Przy okazji - znalazłem gdzieś w przykładach taką konstrukcję:

synchronized(this){
 ...
}

Domyślam się że jest to odpowiednik funkcji synchronized, ale do 
czego służy parametr?

-- 
Piotr Piątkowski, Uczelniane Centrum Informatyki, AGH Krakow, POLAND
Technical Details
Message-ID: <57qmu4$fe4@galaxy.uci.agh.edu.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.nask.pl!uw.edu.pl!cyfronet!galaxy.uci.agh.edu.pl!galaxy.uci.agh.edu.pl!news

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.nask.pl!uw.edu.pl!cyfronet!galaxy.uci.agh.edu.pl!galaxy.uci.agh.edu.pl!news
From: kompas@galaxy.uci.agh.edu.pl (Piotr Piatkowski)
Newsgroups: pl.comp.lang.java
Subject: synchronizacja wątków
Date: 1 Dec 1996 02:27:32 +0100
Organization: University of Mining & Metallurgy
Lines: 44
Message-ID: <57qmu4$fe4@galaxy.uci.agh.edu.pl>
NNTP-Posting-Host: galaxy.uci.agh.edu.pl
Mime-Version: 1.0
X-Newsreader: TIN [UNIX 1.3 unoff BETA release 960713]
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit