Parameterausführung bei Methodenaufruf

Buckwild

Mitglied
Hallo zusammen,

ich habe ein Verständnisproblem welches ich anhand eines Beispiels erklären möchte..

sagen wir ich habe einen methodenaufruf wie folgt:
Java:
method(++i)

wobei diese methode synchronized ist.

und gehen wir davon aus ein Thread befindet sich bereits in der Methode und ein zweiter wartet.

wird die operation ++i vom zweiten Thread ausgeführt bevor synchronized greift?

oder besser ausgedrückt: führt ein thread die operation ++i aus bevor er zugang zur Methode bekommt welche durch synchronized blockiert ist??
 
Zuletzt bearbeitet:
S

SlaterB

Gast
ging um Thementitel ;)

ein Testprogramm ist in der Tat auch mein Vorschlag, würde ich glatt selber machen,
eine Instanzvariable erhöhen, den Thread vor der Methode warten lassen, währenddessen nachschauen ob erhöht wurde,
müsste meinem Verständnis nach so sein,

ist letztlich aber egal, nur ne syntaktische Spielerei, die man nur dann nutzen sollte wenn man weiß was man tut oder die Nebenwirkungen irrelevant sind

man kann ja
Java:
int k = ++i;
method(k);
schreiben, wenn es wichtig ist, oder
Java:
i++;
method(i);
usw.
 

Buckwild

Mitglied
ja das schon.
bei i++ wird erst i verwendet dann weitergeschaltet
bei ++i wird weitergeschaltet und dann ausgeführt.

mein problem ist, wie ich hoffe ich verständlich geschildert habe :), dass ich nicht weiss wann ++i ausgeführt wird.
 

HimBromBeere

Top Contributor
Wie Slater schon gesagt hat:

Java:
int i = 0;
i++;
method(i)

testen gegen
Java:
int i = 0;
method(++i);

Bau dir in
Code:
method
ein
Code:
sysout
ein, und du bekommst die Antwort...
 

knucki

Aktives Mitglied
Java:
    int i = 0;
    int j = 0;
    while (i < 10) {
      System.out.println(i++);
    }
    while (j < 10) {
      System.out.println(++j);
    }
 

Buckwild

Mitglied
ok. auf diesen test hät ich auch selber kommen können.. aber danke für die hilfe!!

also wird der parameter immer vor dem zugang zur methode berechnet/initialisiert.
 

Nardian

Bekanntes Mitglied
Ich fürchte mit testen wird man da wohl eher schlecht an ein Ergebnis kommen...

Aber im Grunde läufts so ab:
die ++ Operation (egal oder pre- oder postfix ... also ob ++i oder i++) ist einfach ein Inkrement. Der unterschied zwischen den beiden ist der Rückgabewert der Funktion.

Java:
int i = 0;
System.out.println(i++); //Ausgabe: 0
System.out.println(i);   //Ausgabe: 1
System.out.println(++i); //Ausgabe: 2
System.out.println(i);   //Ausgabe: 2
[/Java]

soviel dazu.

Um zurück zum eigentlichen Thema zu kommen, deine Frage geht meiner Meinung nach in Richtung von verschachtelten Funktionsaufrufen. Dh wenn du sowas machen magst wie
[code=Java]
funktion(machwas(fkt(i++)));
Solch ein Aufruf hat rein gar nichts mit Threads zu tun. Es geht lediglich um die Auflösung / Abarbeitung der Befehle / Funktionen.

Wie wird das gemacht? Das kann man sich ganz einfach überlegen. Eine Funktion braucht als Parameter (falls es einen erwartet - aber bei dem Bsp oben erwarten sich alle 3 Funktionen jeweils einen Parameter [man beachte i++ ist ein Befehl, keine Funktion :)]) eine Instanz. Das heißt, eine Funktion kann keine Funktion als Parameter bekommen, was weiters heißt, dass die innere Funktion zuerst aufgelöst werden muss.

wenn man das nun durchdenkt, muss zuerst
Java:
fkt(i++)
ausgewertet werden, dessen Rückgabewert (was auch immer das sein mag) wird dann als Parameter an "machwas" übergeben, und wieder dessen Rückgabewert an "funktion".


Und nun - zu guter Letzt - eine klare Antwort auf deine eigentliche Frage:
Java:
method(++i)
bevor "method" aufgerufen wird, wird i erhöht und der neue Wert von i wird der Funktion "method" übergeben. Wie bereits erwähnt, hat das ganze nichts mit Threads zu tun.

Lg
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Methodenaufruf mit geänderten Argumenten Java Basics - Anfänger-Themen 10
S Methoden Methodenaufruf rekursiv zählen Java Basics - Anfänger-Themen 4
N methodenaufruf for each geht nicht Java Basics - Anfänger-Themen 2
K Methodenaufruf /-ausgabe Java Basics - Anfänger-Themen 5
O Methodenaufruf Java Basics - Anfänger-Themen 5
V Neue Ausgabe von toString nach Methodenaufruf Java Basics - Anfänger-Themen 9
Queiser Methodenaufruf Java Basics - Anfänger-Themen 2
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
I Java Methodenaufruf Java Basics - Anfänger-Themen 9
A OOP Methodenaufruf in einer anderen Klasse Java Basics - Anfänger-Themen 2
G Methoden Probleme beim Methodenaufruf Java Basics - Anfänger-Themen 2
M Methodenaufruf über SQL UPDATE Java Basics - Anfänger-Themen 8
M Methodenaufruf in der Main Datei funzt nicht Java Basics - Anfänger-Themen 13
BadBat Klassen instanz als variable + methodenaufruf Java Basics - Anfänger-Themen 4
M Methodenaufruf in Methode Java Basics - Anfänger-Themen 6
M Objekt Name für MethodenAufruf nachträglich zuweisen? Java Basics - Anfänger-Themen 2
J if() mit Methodenaufruf kombiniert (Pixelerkennung) Java Basics - Anfänger-Themen 3
A Probleme beim Methodenaufruf von Object[] ! Java Basics - Anfänger-Themen 12
A Probleme beim Methodenaufruf von char[] ! Java Basics - Anfänger-Themen 10
T Rekursiver Methodenaufruf funktioniert nicht Java Basics - Anfänger-Themen 7
D Methoden g.setColor funktioniert nicht bei Methodenaufruf in anderer Klasse Java Basics - Anfänger-Themen 1
M Methoden Methodenaufruf allgemein Java Basics - Anfänger-Themen 3
H Ist Math.Random() eine Methode oder ein Methodenaufruf (Klausurfrage) Java Basics - Anfänger-Themen 4
O Methodenaufruf Java Basics - Anfänger-Themen 6
F Methodenaufruf Java Basics - Anfänger-Themen 1
F Erste Schritte Label Text vor Methodenaufruf setzen Java Basics - Anfänger-Themen 17
J Array mit Methodenaufruf Java Basics - Anfänger-Themen 2
S Problem bei Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 3
OnDemand Methodenaufruf Java Basics - Anfänger-Themen 3
A Methoden Benutzerdefinierter Methodenaufruf Java Basics - Anfänger-Themen 4
O Methodenaufruf - Inhaltsveränderung Java Basics - Anfänger-Themen 23
G Methodenaufruf anderer Klasse Java Basics - Anfänger-Themen 18
L Einfacher Methodenaufruf vs. Objekt Java Basics - Anfänger-Themen 4
O Methodenaufruf im Konstruktor Java Basics - Anfänger-Themen 6
G was ist ein Methodenaufruf mit (){}? Java Basics - Anfänger-Themen 6
S Methoden Klassen Definition - Methodenaufruf Java Basics - Anfänger-Themen 7
K Methoden Methodenaufruf für BufferedWriter .. Java Basics - Anfänger-Themen 5
feardorcha Methodenaufruf Übergabe- und Rückgabewert Java Basics - Anfänger-Themen 5
W Methodenaufruf innerhalb einer Klasse - static vs. this Java Basics - Anfänger-Themen 3
A Problem bei Methodenaufruf Java Basics - Anfänger-Themen 6
A Methodenaufruf Java Basics - Anfänger-Themen 4
P Vererbung Methodenaufruf funktioniert aber Wertzuweisung von Variablen nicht Java Basics - Anfänger-Themen 9
S methodenaufruf Java Basics - Anfänger-Themen 8
G Erste Schritte Methodenaufruf, Variablen-Deklaration Java Basics - Anfänger-Themen 6
L Methodenaufruf in main() Java Basics - Anfänger-Themen 3
M Methodenaufruf in for-Schleife - nur 1 mal ausgegeben Java Basics - Anfänger-Themen 3
I Externer Methodenaufruf, Punkt-Notation Java Basics - Anfänger-Themen 11
I Methoden Rückverfolgung Methodenaufruf Java Basics - Anfänger-Themen 15
E Methoden Wie kann ich eine Methode so schreiben, dass Methodenaufruf polymorph erfolgen kann? Java Basics - Anfänger-Themen 8
M Methoden Methodenaufruf mit .class. Java Basics - Anfänger-Themen 2
J rekursiver Methodenaufruf Java Basics - Anfänger-Themen 12
K Klassen this-Referenz und Klassen/Methodenaufruf Syntax Java Basics - Anfänger-Themen 3
T Java mehrfacher Methodenaufruf Java Basics - Anfänger-Themen 15
L Methodenaufruf aus anderer Klasse Java Basics - Anfänger-Themen 5
B Quicksort --> Methodenaufruf Java Basics - Anfänger-Themen 10
O Methodenaufruf Java Basics - Anfänger-Themen 4
A nullPointerException bei Methodenaufruf Java Basics - Anfänger-Themen 16
J Vererbung, Methodenaufruf Java Basics - Anfänger-Themen 4
M Problem bei Methodenaufruf aus ActionListener Java Basics - Anfänger-Themen 5
G Methodenaufruf aus der Kommandozeile Java Basics - Anfänger-Themen 28
N Methodenaufruf funtioniert nicht Java Basics - Anfänger-Themen 3
C Methodenaufruf mit Variablen die gesetzt werden Java Basics - Anfänger-Themen 10
Antoras mit ActionListener/Methodenaufruf Textfelder zeichnen Java Basics - Anfänger-Themen 4
G Dynamischer Methodenaufruf Java Basics - Anfänger-Themen 3
G Methodenaufruf über ein Objekt einer anderen Klasse Java Basics - Anfänger-Themen 7
H ungültige methodenaufruf Java Basics - Anfänger-Themen 16
G Methodenaufruf Java Basics - Anfänger-Themen 3
G Frage zu Oberklasse bei Methodenaufruf Java Basics - Anfänger-Themen 2
V Dynamischer Klassen bzw. Methodenaufruf Java Basics - Anfänger-Themen 6
V Wie und wieso geht dieser Methodenaufruf? Java Basics - Anfänger-Themen 2
S Methodenaufruf Java Basics - Anfänger-Themen 6
G Methodenaufruf in der for-Schleife mit Array Java Basics - Anfänger-Themen 7
L hsqldb Methodenaufruf Java Basics - Anfänger-Themen 10
K synchron und asynchroner Methodenaufruf Java Basics - Anfänger-Themen 17
R Fehler bei Methodenaufruf Java Basics - Anfänger-Themen 2
G Methodenaufruf Java Basics - Anfänger-Themen 3
T NullPointerException bei Methodenaufruf Java Basics - Anfänger-Themen 2
G Methodenaufruf Java Basics - Anfänger-Themen 10
K Klassenübergriefendes Methodenaufruf Problem Java Basics - Anfänger-Themen 6
S methodenaufruf. Java Basics - Anfänger-Themen 16
G methodenaufruf Java Basics - Anfänger-Themen 4
E Methodenaufruf mittels variable? kA Java Basics - Anfänger-Themen 5
G methodenaufruf Java Basics - Anfänger-Themen 3
G methodenaufruf Java Basics - Anfänger-Themen 5
W Überschreiben und Methodenaufruf Java Basics - Anfänger-Themen 3
L Methodenaufruf zwischen Klassen Java Basics - Anfänger-Themen 3
C Methodenaufruf mit throws IOException Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben