Это не домашнее задание для меня , это задание для студентов из какого-то университета. Я заинтересован в решении из личного интереса.
Задача - создать класс (Calc), который содержит целое число. Два метода add и mul должны добавлять или умножать это целое число.
Два потока настраиваются одновременно. Один поток должен вызывать c.add (3) десять раз, другой должен вызывать c.mul (3) десять раз (конечно, для того же объекта Calc).
Класс Calc должен убедиться, что операции выполняются поочередно (add, mul, add, mul, add, mul, ..).
Я не слишком много работал с проблемами, связанными с параллелизмом, а тем более с Java. Я придумал следующую реализацию для Calc:
class Calc{
private int sum = 0;
//Is volatile actually needed? Or is bool atomic by default? Or it's read operation, at least.
private volatile bool b = true;
public void add(int i){
while(!b){}
synchronized(this){
sum += i;
b = true;
}
}
public void mul(int i){
while(b){}
synchronized(this){
sum *= i;
b = false;
}
}
}
Я хотел бы знать, нахожусь ли я на правильном пути здесь. И, конечно, есть более элегантный путь к while (b) части.
Я хотел бы услышать мысли ваших парней.
PS: подпись методов не должна быть изменена. Кроме того, я не ограничен.