Hallo,
Bei der unteren Aufgabe habe ich auch erst gedacht, ich müsste überall dort, wo einer der beiden Private parameter auftaucht ein synchronized setzen. (ist laut Codegym auch die richtige Lösung.
Dann habe ich aber an der Aufgabe rumgespielt, und da die Methoden ja alle nicht static sind, muss ich ja jedesmal ein neues Objekt in meinem neuen Thread instanziieren. Das bedeutet doch aber auch, dass die Threads nicht gemeinsam die privates benutzen, sondern das jedes Objekt in den Threads ihre eigenen Privates erstellen. wodurch ich doch das synchronized gar nicht brauche, oder was sagt ihr dazu?
Liebe Grüße
Claudia
package de.codegym.task.task17.task1716;
/*
Synchronisierte Methoden
*/
public class Solution {
private double param = Math.random(); // 0.0 bis 0,99
private StringBuilder sb = new StringBuilder();
private void method0() {
Double d = method3();
} //d = 0.0 bis 0.99, wird in method 1 eingesetzt
protected synchronized void method1(String param1) {
Solution solution = new Solution();
solution.method0();
}
public void method2(int param1) {
param1++;
} // eins mehr als param1
double method3() {
double random = Math.random(); // 0.0 bis 0,99
param += 40.7; // möchte auf param zugreifen, diese ist aber protected
return random + param; //0.0 bis 1.99 , wird in method 0 eingesetzt als d
}
private synchronized void method4() {
sb.append(1).append(1).append(1).append(1);
} //Buchstabenfolge aus 4 Buchstaben
protected void method5(String param2) {
new StringBuffer().append(param2).append(param2).append(param2);
} //Buchstabenfolge aus 3 Buchstaben
public String method6(int param2) {
System.out.println("Denken....");
method7(5e-2);
sb = new StringBuilder("Alles klar!"); //sb ist wieder ein private aus der Klasse
return sb.toString();
}
String method7(double param2) {
return "" + param2;
} // in method6 wird 5e-2 eingesetzt, die Zahl würde als String zurückgeliefert werden
public static void main(String[] args) {
}
}