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
Author: Piotr Piatkowski
Date: Sun, 01 Dec 1996 01:27
Date: Sun, 01 Dec 1996 01:27
44 lines
2638 bytes
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