Se eu utilizar o synchronized em um método, ele faz isso...
synchronized (this)
Ou seja, nessa caso estaremos passando o objeto atual para o synchronized.
No caso do exercício, apenas sincronizamos o atributo mensagens de uma instância de ProduzMensagens, porém referenciamos ele como mensagens e não como this.mensagens.
synchronized (this.mensagens) {
this.mensagens.add("Mensagem " + i);
}
Tem diferença para o synchronized ?