🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.java
1 messages
1 total messages Started by Piotr Piatkowski Sun, 01 Dec 1996 01:27
synchronizacja wątków
#125
Author: 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
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads