Дело в том, что synchronized над методом указывает, что объектом синхронизации будет this, у вас этого this два: myT1 и myT2.
Внутри метода производятся операции над переменной static int a
, которая только одна.
Получается, что в каждом потоке ничего не блокируется, т.к. каждый поток синхронизируется только сам с собой.
Когда вы добавляете static к методу - this становится одним на уровне всего приложения и потоки, выполняя этот метод сталкиваются с необходимостью синхронизации.