public class SynchronizedMethod {
/**
* Print 10 numbers without synchronization. Sleep randomly
* between calls to println.
*/
private static class AdderSync implements Runnable {
private int n = 0;
public synchronized void run() {
for(int i = 0; i < 1000; i++) {
n++;
}
}
public synchronized int getN() {
return n;
}
}
/**
* Print 10 numbers *with* synchronization. Sleep randomly between
* calls to println.
*/
private static class AdderNoSync implements Runnable {
private int n = 0;
public void run() {
for(int i = 0; i < 1000; i++) {
n++;
}
}
public int getN() {
return n;
}
}
public static void main(String[] args) {
Thread t1, t2, t3, t4;
// Run 4 threads with AdderSync
System.out.println("* AdderSync");
AdderSync adder1 = new AdderSync();
t1 = new Thread(adder1);
t2 = new Thread(adder1);
t3 = new Thread(adder1);
t4 = new Thread(adder1);
t1.start();
t2.start();
t3.start();
t4.start();
try {
t1.join();
t2.join();
t3.join();
t4.join();
} catch(InterruptedException e) {
System.err.println("Thread Interrupted");
}
System.out.println("n = " + adder1.getN());
// Run 4 thrads with AdderNoSync
System.out.println("* AdderNoSync");
AdderNoSync adder2 = new AdderNoSync();
t1 = new Thread(adder2);
t2 = new Thread(adder2);
t3 = new Thread(adder2);
t4 = new Thread(adder2);
t1.start();
t2.start();
t3.start();
t4.start();
try {
t1.join();
t2.join();
t3.join();
t4.join();
} catch(InterruptedException e) {
System.err.println("Thread Interrupted");
}
System.out.println("n = " + adder2.getN());
}
}