import java.util.concurrent.locks.ReentrantLock; class SaueRunnable implements Runnable { private int hastighet; private int startLengde = 80; private static int sauer = 0; private int sau = ++sauer; private boolean running = true; public SaueRunnable(int v, int s) { hastighet = v; startLengde = s; } private static int resultatTeller = 0; private static final ReentrantLock resultatL?s = new ReentrantLock(); private int resultat = 0; private static int hentResultat() { resultatL?s.lock(); try { return ++resultatTeller; } finally { resultatL?s.unlock(); } } @Override public void run() { int lengde = startLengde; while (running) { if (lengde < 0) { running = false; resultat = hentResultat(); System.out.printf("\033[%d;0H(%2d) ", sau, resultat); } else { System.out.printf("\033[%d;%dH? ", sau, lengde); } try { Thread.sleep(hastighet); } catch (InterruptedException e) { running = false; } lengde--; } } }