Почему использование synchronized в setter плохо?
Возможно потому, что сеттер должен использоваться для установки значения одного поля, а использовать synchronized для этого избыточно.
Потому что обычно это не имеет никакого смысла.

Разве что брать во внимание что-то типа 
void setVar(int var) {
  if(var == null) {
    this.var = var;
  }
но это уже не сеттер.

А в случае простого присваивания - нет никакой разницы между двумя последовательными установками значения в двух последовательных вызовах или в двух параллельных.