Мудрый человек думает раз, прежде чем два раза сказать Все методы, кроме метода main, класса Solution должны быть thread safe. Сделайте так, чтобы оба метода могли выполняться одновременно двумя различными тредами. synchronized(this) для этого не подходит, используй другой объект для лока. Требования: 1. Класс Solution должен содержать метод getSumOfVar1AndVar2(). 2. Класс Solution должен содержать метод getSumOfVar3AndVar4(). 3. Метод getSumOfVar1AndVar2() должен содержать synchronized блок. 4. Метод getSumOfVar3AndVar4() должен содержать synchronized блок. 5. Synchronized блоки методов getSumOfVar1AndVar2() и getSumOfVar3AndVar4() должны использовать мьютексы разных объектов. Валидатор мое решение не пропустил, но мне интересно в жизни такое решение возможно?
package com.javarush.task.task26.task2608;

/*
Мудрый человек думает раз, прежде чем два раза сказать
*/
public class Solution {
    int var1;
    int var2;
    int var3;
    int var4;

    public Solution(int var1, int var2, int var3, int var4) {
        this.var1 = var1;
        this.var2 = var2;
        this.var3 = var3;
        this.var4 = var4;
    }

    public int getSumOfVar1AndVar2() {
        Solution solution = new Solution(var1,var2,0,0){
            @Override
            public synchronized int getSumOfVar1AndVar2() {
                return var1 + var2;
            }
        };
        return solution.getSumOfVar1AndVar2();
    }

    public int getSumOfVar3AndVar4() {
        Solution solution = new Solution(0,0,var3,var4){
            @Override
            public synchronized int getSumOfVar3AndVar4() {
                return var3 + var4;
            }
        };
        return solution.getSumOfVar3AndVar4();
    }

    public static void main(String[] args) {

    }
}
Хотя решение с synchronized (anyEmptyObject) {return var1 + var2} - мне понравилось...