[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