[linux-l] Debian-Mirror der belug...

Oliver Bandel oliver at first.in-berlin.de
Mo Okt 20 20:31:00 CEST 2003


On Mon, Oct 20, 2003 at 06:10:46PM +0200, Tobias Schlottke wrote:
> On Mon, 20 Oct 2003, Jan-Benedict Glaw wrote:
> 
> ...
> > > Locking wird in Java auf Objektebene realisiert.
> > > Leider führt (zumindest bei den letzten jre's die ich
> > > mir angeguckt habe) das Holen und Loslassen eines Locks
> > > zu einem prozess-weiten Betriebssystem-Lock. Das frißt
> > > leider ziemlich Performance.
> >
> > D.h., daß Du keine einfache, globale Variable unter einem Lock anpacken
> > kannst, sondern diese in eine Klasse gießen mußt?
> 
> Ja:
> 
> class Counter {
>   int value = 0;
>   synchronized inc() {
>     value++;
>   }
> }
> 
> Beim Eintritt in die Method wird das Object gelockt,
> beim Verlassen wieder losgelassen.

Na, das klingt doch ganz sinnvoll.


> Man kann auch
> innerhalb von einer Methode einen sogenannten
> synchronized Block einfügen (der auch auf ein anderes
> Object verweisen kann):
> 
> class MyThread {
>   Counter counter;
>   run() {
>     synchronized (counter) {
>       counter.value++;
>     }
>   }
> }
> 
> (Ist mit der obigen Couner Klasse natürlich Unsinn,
> hier geht's nur ums Prinzip)
> 
> 
> 
> > Kann ein Objekt nicht auch von mehreren Threads gleichzeitig benutzt
> > werden? Wie sieht das da aus?
> 
> Jedes Object kann genau einen Locker haben. Wenn ein
> Thread in einen synchronized Block eintritt,

Ist "synchronized" ein Java-Keyword, das das Locking
ermöglicht?
Ist es also quasi doch ein explizites Locking?!


Ciao,
   Oliver





Mehr Informationen über die Mailingliste linux-l