Hallo,
drei Fragen dazu:
1) Hat der synchronized-Modifier in diesem Snippet überhaupt Sinn?
So wie ich das sehe, ist die einzige Resource, auf die möglicherweise gleichzeitig zugegriffen wird, ein und dasselbe File. Da dieses aber nur gelesen wird und jeder Thread sein eigenes Handle darauf bekommt(?) sind multithread-Zugriffe doch trotzdem voneinander unabhängig oder nicht? Kann man sich das also nicht sparen?
2) Gibt es da einen Trick oder ein Schema, um keinen erforderlichen Mutex zu vergessen? Auf welche Zugriffsarten muss man da achten?
3) Wie groß ist der Overhead von synchronized-Modifiern, die man nicht braucht? Was passiert da intern?
Danke euch!
drei Fragen dazu:
1) Hat der synchronized-Modifier in diesem Snippet überhaupt Sinn?
Java:
/**
* Load preferences fresh from disk
*/
public synchronized void loadPreferences(String fname) {
System.out.println("loading " + fname + "...");
try {
BufferedReader br = new BufferedReader(new FileReader(fname));
String line;
while ((line = br.readLine()) != null)
parsePrefLine(line);
br.close();
} catch (FileNotFoundException fnf) {
System.err.println("FILE NOT FOUND: " + fname);
} catch (IOException e) {
e.printStackTrace();
}
}
So wie ich das sehe, ist die einzige Resource, auf die möglicherweise gleichzeitig zugegriffen wird, ein und dasselbe File. Da dieses aber nur gelesen wird und jeder Thread sein eigenes Handle darauf bekommt(?) sind multithread-Zugriffe doch trotzdem voneinander unabhängig oder nicht? Kann man sich das also nicht sparen?
2) Gibt es da einen Trick oder ein Schema, um keinen erforderlichen Mutex zu vergessen? Auf welche Zugriffsarten muss man da achten?
3) Wie groß ist der Overhead von synchronized-Modifiern, die man nicht braucht? Was passiert da intern?
Danke euch!