1) è il possibile? Quali sono le implicazioni?
Sì, è possibile.
L'implicazione è che qualsiasi stato nel Runnable è (potenzialmente) condiviso da tutti i thread e l'accesso a/update di tale stato deve essere correttamente sincronizzato.
2) Se chiamo Thread.sleep (0); in classe MyRunnable, entrambi i thread dormiranno perché sono lo stesso oggetto oppure l'entità thread è completamente separata dall'oggetto?
No, non lo faranno.
La discussione è logicamente distinta dallo Runnable
. La chiamata a Thread.sleep()
non influisce direttamente sullo e su altri thread che potrebbero condividerla. (Si potrebbe effettuare altri fili indirettamente, ad esempio se un thread dorme mentre sta tenendo lock primitivo del Runnable, e gli altri thread devono acquisire il blocco di progredire.)
3) Sarebbe mai esserci una ragione per fare questo, se no, per favore rispondi comunque alle due domande precedenti, perché non credo di aver capito completamente il meccanismo del thread?
È forza farlo se non c'è uno stato-specific thread associato con la Runnable
e di voler ridurre al minimo le spese generali dello spazio, o le spese generali di inizializzazione del Runnable
. Ma tali casi d'uso sono rari nella pratica.
Nella maggior parte dei casi di utilizzo del mondo reale, ogni thread richiede un'istanza distinta Runnable
.
fonte
2012-03-24 04:39:21
Perché non provi tu stesso e vedi? –
Cercando di discernere cosa sta succedendo con il thread, solo attraverso i test, a volte può avere risultati inconcludenti a causa del modo in cui i thread sono. Non voglio lasciare, in questo caso, la robustezza del mio programma al caso. – rubixibuc