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?
- překlad programu skončí chybou, protože
0xeeeeeeee a 0x11111111 nejsou typulong
- -1, protože výsledek sčítání je
0xffffffffffffffff - program nevytiskne nic, protože se zacyklí
- většinou -1, ale občas i jinou hodnotu
- většinou -1, ale občas nic, protože se zacyklí