public class Main {
public static void main(String[] args) {
Brojac b = new Brojac();
Brojac b2 = new Brojac();
MyThread t1 = new MyThread(1, b);
MyThread t2 = new MyThread(2, b2);
t1.start();
t2.start();
try {
t1.join();
t2.join();
}
catch (InterruptedException ie) {
System.out.println(ie);
}
System.out.println(b.getBr());
System.out.print(b2.getBr());
}
}
class MyThread extends Thread {
private int id;
Brojac b;
public MyThread(int _id, Brojac _b) {
id = _id;
b = _b;
}
@Override
public void run() {
for(int i = 0; i < 10; ++i) {
// System.out.println("Thread " + id + " " + i);
b.safe_zgolemi_brojac();
// zemi ja vrednosta na b
// zgolemi ja vrednosta T1, T2
// vrati ja vrednost
}
}
}
class Brojac {
private static int br = 0;
public static void unsafe_zgolemi_brojac() {
br++; // no atomicity
try {
Thread.sleep(10);
}
catch (InterruptedException ie) {
System.out.println(ie);
}
}
public synchronized void safe_zgolemi_brojac() {
br++; // atomocity
}
public static int getBr() {
return br;
}
}