MaxiPrime ha scritto:
Il mio problema che l'output non compare in ordine. Ossia è meglio dire che ogni singolo thread non entra in ordine.
Partiamo da un aspetto, la implementazione fatta è purtroppo palesemente errata tecnicamente. Il wait() va
sempre messo in un ciclo che deve testare una condizione che è quella che deve "reggere" affinché il thread debba rimanere in
wait.
while (condizione_per_far_stare_in_wait) {
xyz.wait();
}
Inoltre nel tuo codice NON c'è l'uso di notify()/notifyAll(). Questi sono i metodi che si "contrappogono" al wait() e servono appunto per gestire la
condition-queue intrinseca degli oggetti.
Tu hai usato degli interrupt() ma questo uso è sbagliato in questo contesto! Anche solo per una banale/ovvia questione concettuale: se interrompi così un thread, quel thread non ha modo di capire se è stato interrotto perché è la logica del Market che ha deciso così oppure se è stato interrotto perché un (potenziale) qualunque altro thread ha deciso di interrompere per es. tutti i 6 thread.
Infine c'è la questione dell'ordine di avvio. Purtroppo questo è un aspetto molto aleatorio dei thread. Lo start() fa solo una banalissima cosa: mette il thread in stato "runnable" (ovvero: non in esecuzione ma che può essere eseguito). Poi ci pensa lo scheduler dei thread a decidere quando avviarlo. E qui quindi dipende dallo scheduler dei thread del Sistema Operativo, dal carico di lavoro della CPU in quel momento, dal numero di
core .... da millemila fattori che non sono facilmente noti.
Insomma: NON è garantito che l'ordine di avvio dei thread segua davvero l'ordine degli start(). Il primo buy() eseguito potrebbe essere quello di T4 o T5. O potrebbe essere eseguito per primo il sell di T6.
Se vuoi che ci sia un ordine ben preciso, si può fare ma richiede ulteriori valutazioni e più codice.
Pertanto la domanda è: quell'output mostrato è solo un "esempio", uno dei possibili scenari .... o deve sempre essere
esattamente quello scenario??
P.S. per completezza riporto che ho cercato il testo in rete: si tratta di un esame universitario del 2017 ma sul PDF che ho trovato non c'è nulla in più di spiegazione rispetto a quanto già riportato sopra.