Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   HELP --> Java vraagje..... (https://forum.scholieren.com/showthread.php?t=13155)

apeldoorn 30-01-2002 15:15

HELP --> Java vraagje.....
 
Kep een java vraagje, je hebt een klasse Rekening

public class Rekening
{
public double saldo;

public Rekening (double beginsaldo)
{
saldo = beginsaldo;
}

public synchronized void boek (double bedrag)
{
saldo += bedrag;
}

public synchronized void maakOver (double bedrag, Rekening naar)
{
boek(-bedrag);
naar.boek(bedrag);
}
}

Kan iemand mij vertellen of deze klasse problemen geeft bij het parallel uitvoeren van de methoden van de klasse rekening. Volgens mij namelijk niet, maar voglens het antwoordenmodel treedt er dus een deadlock op. Zijn er slimmeriken die met zekerheid mij het antwoord kunnen vertellen???

Triloxigen 30-01-2002 16:24

is dit niet JavaScript?

apeldoorn 30-01-2002 17:54

euhm, nee...maar lijkt er wel beetje op

Chimera 30-01-2002 18:58

Yup. Hij locked zichzelf, en locked daarna het 'naar' object. Als dit 'naar' object tegelijkertijd hetzelfde doet heb je een deadlock.

Chimera 30-01-2002 18:58

Citaat:

McLaren schreef:
is dit niet JavaScript?
*SPANK*

apeldoorn 30-01-2002 19:48

Citaat:

Chimera schreef:
Yup. Hij locked zichzelf, en locked daarna het 'naar' object. Als dit 'naar' object tegelijkertijd hetzelfde doet heb je een deadlock.


Ik ben het er niet mee eens http://forum.scholieren.com/biggrin.gif

Hij lockt niet het object, want je synchroniseert alleen de methode, en niet het gehele object.

Stel je voor dat je 2 threads hebt. Beide treads roepen op hun eigen "rekening" de methode maakover aan.
BV: thread1 : maakOver(100, rek2);
BV: thread2 : maakOver(100, rek1);

rekening 1 en 2 kunnen nu niet meer gebruikt worden tot maakOver klaar is.
MaakOver boekt, die ook synchronized is. Dus alle volgende oproepen wachten tot boek is afgelopen. Maar boek roept niets anders aan dat synchronized is, en zal altijd eindigen.
Dit geldt voor zowel boek op van en op naar, dus maakOver zal altijd eindigen. Daarna wordt het lock vrijgegeven, dus geen deadlock toch?!?!


[Dit bericht is aangepast door apeldoorn (30-01-2002).]

Chimera 30-01-2002 19:57

Eerst object is compleet afgesloten op 't moment dat een synch method aangeroepen wordt. Als dan voor 'naar' een synch meth aangeroepen wordt, heeft een gelocked object een lock op een ander object, dat een lock kan aanvragen op object 1. Deadlock-gevaar dus.

Dat jij het er niet mee eens bent doet weinig ter zake, zo werken synched methods in Java. http://forum.scholieren.com/biggrin.gif

apeldoorn 30-01-2002 20:02

Dus jij weet 100% zeker als je een synchronized methode aanroept, dat hij dan gelijk het gehele Object lockt?? Volgens mij is dat namelijk niet waar...

Chimera 30-01-2002 20:11

Hij locked in ieder geval die methodes, wat nog meer gelocked wordt is afhankelijk van welke methoden en members aangeroepen worden. Maar dat doet verder ook niet ter zake.

apeldoorn 30-01-2002 20:21

Mmm....ik ben hardleers http://forum.scholieren.com/smile.gif

Zou je kunnen zeggen wat hier fout aan is (deze beredenatie):

De methode boek "loopt nooit vast". Als er meerdere threads erin willen, wachten ze netjes op elkaar. De methode maakOver kan probleem geven, omdat die tijdens de executie moet wachten op boek (omdat al een andere thread ermee aan de slag is). Dus maakOver zit vast, en boek zit vast. Boek komt echter altijd vrij, dus er komt een moment dat ook maakOver zeg maar weer vrij komt. Er komt dus nooit een situatie waarin een deadlock optreedt...

Wat is er nu dan fout aan mijn redenatie...ik snap het niet.... http://forum.scholieren.com/frown.gif

Chimera 30-01-2002 21:45

Threads wachten niet netjes. Als Thread A en B (Met rekening 1 en 2) tegelijkertijd bezig gaan, en tegelijkertijd geld overboeken (Rekening 1 -> 2 en vice-versa) dan krijg je een deadlock.

apeldoorn 31-01-2002 10:25

Citaat:

Chimera schreef:
Threads wachten niet netjes. Als Thread A en B (Met rekening 1 en 2) tegelijkertijd bezig gaan, en tegelijkertijd geld overboeken (Rekening 1 -> 2 en vice-versa) dan krijg je een deadlock.



Okay, ik snap hem geloof ik http://forum.scholieren.com/smile.gif. Bedankt voor de support slimme Chimera http://forum.scholieren.com/biggrin.gif

Chimera 31-01-2002 12:41

Citaat:

apeldoorn schreef:

Okay, ik snap hem geloof ik http://forum.scholieren.com/smile.gif. Bedankt voor de support slimme Chimera http://forum.scholieren.com/biggrin.gif

NP http://forum.scholieren.com/biggrin.gif

Is dit voor school BTW? We hebben er een heel vak over gehad, concurrent programming. Best leuk, threads kunnen hele vage dingen doen http://forum.scholieren.com/biggrin.gif

apeldoorn 31-01-2002 13:21

Citaat:

Chimera schreef:
NP http://forum.scholieren.com/biggrin.gif

Is dit voor school BTW? We hebben er een heel vak over gehad, concurrent programming. Best leuk, threads kunnen hele vage dingen doen http://forum.scholieren.com/biggrin.gif


Ja, was voor school. Wij behandelen elke week 1 onderwerp m.b.t. programmeren in java vrij globaal. Alleen wij werken met een erg amateuristisch boek ("Object oriented programming in Java" van Martin Kalin (Depaul University)). Er staan me een fouten in... Onder andere dat ze een stukje code in een klasse synchroniseren met een lock object, terwijl dat lock object zeg maar bij elke thread uniek is. Dus dan klopt er weer geen bout van.

In dat boek stond dus ook, als je bv. 2 methoden synchroniseert en als dan 1 object de ene methode in komt, dat dan nog een ander object de ander gesynchroniseerde methode in kan. Daarom dacht ik dus ook dat er geen deadlock kon optreden. Ik kwam er gelukkig nog vlak voor tentamen achter, dat dan gelijk het gehele object gelockt is...

Maar we zullen het vast ook nog wel eens een stuk uitgebreider krijgen. En het tentamen was vrij simpel gelukkig http://forum.scholieren.com/smile.gif.

Thanks for the support in ieder geval, ik hoop dat ik ooit nog eens zo slim wordt als jij http://forum.scholieren.com/biggrin.gif

Chimera 31-01-2002 13:40

Citaat:

apeldoorn schreef:

Thanks for the support in ieder geval, ik hoop dat ik ooit nog eens zo slim wordt als jij http://forum.scholieren.com/biggrin.gif

Slijmbal http://forum.scholieren.com/wink.gif

Valt tegen. Had nu al bezig moeten zijn met afstuderen http://forum.scholieren.com/wink.gif

apeldoorn 31-01-2002 15:23

Citaat:

Chimera schreef:
Slijmbal http://forum.scholieren.com/wink.gif


Ach, je moet toch iets zeggen om je te vleien voor een volgende keer als ik vsat zit met java http://forum.scholieren.com/biggrin.gif


Alle tijden zijn GMT +1. Het is nu 00:54.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.