Domanda:
definizione della sun:
void lock()
Acquires the lock.
If the lock is not available then the current thread becomes disabled for thread scheduling purposes and lies dormant until the lock has been acquired.
Cosa si intende?
Mettiamo che ho più Thread in stato runnable.
Uno di questi, scelto dallo scheduler, accede alla CPU, acquisisce un lock, e fa i suoi comodi. A questo punto, mentre il thread scelto lavora, un'altro Thread chiede il lock dello stesso oggetto: che succede esattamente?
Da quello che c'è scritto, il Thread che tenta di acquisire il lock e lo trova chiuso diventa impossibilitato ad essere scelto dallo scheduler e rimane a dormire finchè il lock non è acquisito. Io pensavo che in questo caso il Thread semplicemente restava nello stato Runnable.
Non è forse così?
E poi, a livello di codice, non mi spiego una cosa: nel momento della scelta del Thread in esecuzione, lo scheduler sceglie un thread. Come può poi un altro thread, nel momento in cui quello scelto sta lavorando, tentare di acquisire un lock?