Ein klassischer Unterschied zwischen dem synchronisierten Block und der synchronisierten Methode besteht darin, dass die synchronisierte Methode das gesamte Objekt sperrt. Der synchronisierte Block sperrt nur den Code innerhalb des Blocks.
Synchronisierte Methode: Grundsätzlich deaktivieren diese beiden Synchronisierungsmethoden das Multithreading. Ein Thread vervollständigt also die Methode1 () und der andere Thread wartet auf die Fertigstellung von Thread1.
Klasse SyncExerciseWithSyncMethod {
public synchronized void method1() {
try {
System.out.println("In Method 1");
Thread.sleep(5000);
} catch (Exception e) {
System.out.println("Catch of method 1");
} finally {
System.out.println("Finally of method 1");
}
}
public synchronized void method2() {
try {
for (int i = 1; i < 10; i++) {
System.out.println("Method 2 " + i);
Thread.sleep(1000);
}
} catch (Exception e) {
System.out.println("Catch of method 2");
} finally {
System.out.println("Finally of method 2");
}
}
}}
Ausgabe
In Methode 1
Schließlich von Methode 1
Methode 2 1
Methode 2 2
Methode 2 3
Methode 2 4
Methode 2 5
Methode 2 6
Methode 2 7
Methode 2 8
Methode 2 9
Schließlich von Methode 2
Synchronisierter Block: Ermöglicht mehreren Threads den gleichzeitigen Zugriff auf dasselbe Objekt [Aktiviert Multithreading].
Klasse SyncExerciseWithSyncBlock {
public Object lock1 = new Object();
public Object lock2 = new Object();
public void method1() {
synchronized (lock1) {
try {
System.out.println("In Method 1");
Thread.sleep(5000);
} catch (Exception e) {
System.out.println("Catch of method 1");
} finally {
System.out.println("Finally of method 1");
}
}
}
public void method2() {
synchronized (lock2) {
try {
for (int i = 1; i < 10; i++) {
System.out.println("Method 2 " + i);
Thread.sleep(1000);
}
} catch (Exception e) {
System.out.println("Catch of method 2");
} finally {
System.out.println("Finally of method 2");
}
}
}
}}
Ausgabe
In Methode 1
Methode 2 1
Methode 2 2
Methode 2 3
Methode 2 4
Methode 2 5
Schließlich von Methode 1
Methode 2 6
Methode 2 7
Methode 2 8
Methode 2 9
Schließlich von Methode 2