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í
