Premetto che se l'applicazione non è distributable, il server usa una sola istanza della classe servlet per rispondere a tutte le richieste (SRV2.2).
Un blocco sincronizzato su un monitor non condiviso equivale ad un blocco non sincronizzato. Non essendo il monitor condiviso non è infatti possibile che due Thread se lo contendano.
Una variabile locale non è condivisa per definizione.
Dunque questo:
Codice:
metodo() {
Object monitor = new Object();
synchronized(monitor) {
fai qualcosa
}
}
equivale a:
Codice:
metodo() {
fai qualcosa;
}
Se il monitor è condiviso allora la sincronizzazione stabilisce una mutua esclusione tra i condividenti. Un campo è condiviso. Dunque:
Codice:
private final Object monitor = new Object();
metodo() {
synchronized(monitor) {
}
}
effettivamente esclude che due Thread possano entrare nel blocco in contemporanea.
Occhio che se cond è un campo delle istanze della tua servlet allora esiste la possibilità che siano creati più ExecutorThread.