Jsem přesvědčen, že všichni čtenáři mého blogu umějí sčítat a ovládají šestnáctkovou soustavu a věřím, že si poradí i se sčítáním v šestnáctkové soustavě. V tomto článku se na jedno takové sčítaní podíváme.

Pro sčítání použijeme třídu Summator. Sčítance budou v atributech x a y a výsledek v atributu result. Samotné sčítání probíhá v metodě compute.

public class Summator {
    private long x;
    private long y;
    private long result;

    public Summator(long x, long y) {
        this.x = x;
        this.y = y;
    }

    public void compute() {
        result = x + y;
    }

    public long getResult() {
        return result;
    }
}

Dále vytvoříme instanci třídy Summator a dvě vlákna. První vlákno zavolá metodu compute na objektu Summator. Druhé vlákno počká na výsledek sčítání (musí být nenulový) a vytiskne jej.

static void add(long op1, long op2) {
    final Summator s = new Summator(op1, op2);
    Runnable r1 = new Runnable() {
        public void run() {
            s.compute();
        }
    };
    Runnable r2 = new Runnable() {
        public void run() {
            long p;
            do {
                p = s.getResult();
            } while (p == 0);
            System.out.println(p);
        }
    };
    new Thread(r1).start();
    new Thread(r2).start();
}

Metodu add zavoláme z metody main s parametry 0xeeeeeeee a 0x11111111.

public static void main(String[] args) {
    add(0xeeeeeeee, 0x11111111);
}

Dokážete bez vyzkoušení programu určit, co se vytiskne?

  1. překlad programu skončí chybou, protože 0xeeeeeeee a 0x11111111 nejsou typu long
  2. -1, protože výsledek sčítání je 0xffffffffffffffff
  3. program nevytiskne nic, protože se zacyklí
  4. většinou -1, ale občas i jinou hodnotu
  5. většinou -1, ale občas nic, protože se zacyklí