Я написал следующий код:
public class ClassLevelSynchronization {
public static void main(String[] args) {
new Thread(new AddThread()).start();
new Thread(new MultiplyThread()).start();
}
}
class UtilityCalculator{
private static final Object ADD_LOCK = new Object();
private static final Object MULTIPLY_LOCK = new Object();
public static int add(int op1, int op2){
synchronized (ADD_LOCK) {
return op1+op2;
}
}
public static int multiply(int op1, int op2){
synchronized (MULTIPLY_LOCK) {
return op1*op2;
}
}
}
class AddThread implements Runnable{
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("Addition of: "+i+" + "+(i+1)+" = "+UtilityCalculator.add(i, i+1));
}
}
}
class MultiplyThread implements Runnable{
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("Multiplication of: "+i+" * "+(i+1)+" = "+UtilityCalculator.multiply(i, i+1));
}
}
}
Как мне обеспечить, чтобы объекты AddThread
и MultiplyThread
могли получать блокировки для методов add(int op1, int op2)
и multiply(int op1, int op2)
соответственно одновременновремя не блокируя друг друга?
Другими словами, я хочу убедиться, что два метода класса UtilityCalculator
могут использоваться одновременно двумя потоками в любой момент времени.Как мне этого добиться?Я что-то упустил в коде?