import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class Main { public static void main(String[] args) { Brojac brojac = new Brojac(); Brojac brojac2 = new Brojac(); t t1 = new t(1, brojac); t t2 = new t(2, brojac); t1.start(); t2.start(); try { t1.join(); t2.join(); } catch (InterruptedException ex) { ex.printStackTrace(); } System.out.println(brojac.getCnt()); System.out.println(brojac2.getCnt()); } } class t extends Thread { int id; static Brojac br; public t(int _id, Brojac br) { id = _id; this.br = br; } @Override public void run() { for(int i = 0; i < 20; i++) { br.zgolemi_brojac_so_mutex(); } } } class Brojac { private static int cnt = 0; private static Lock lock = new ReentrantLock(); // public static void zgolemi_brojac() { // cnt++; // } public void zgolemi_brojac_so_mutex() { lock.lock(); cnt++; lock.unlock(); } public static int getCnt() { return cnt; } }