Sfida: Lock e Condition
Descrizione del Compito
Immagina di progettare un controllore del semaforo per un incrocio molto trafficato. Il sistema semaforico è composto da tre fasi: luce rossa, luce gialla e luce verde. Queste fasi devono essere eseguite in un ordine specifico per garantire un flusso di traffico sicuro ed efficiente.
Il tuo compito è implementare i metodi: redLight(), yellowLight() e greenLight(). Questi metodi devono essere eseguiti rigorosamente nell'ordine di un vero semaforo: prima la luce rossa, poi la luce gialla e infine la luce verde, indipendentemente dall'ordine in cui i thread li chiamano.
Requisiti:
- Sincronizzazione: Garantire che i metodi vengano eseguiti in ordine rigoroso;
- Multithreading: I metodi possono essere chiamati da thread diversi, ma l'esecuzione deve avvenire nell'ordine:
redLight(),yellowLight()egreenLight(); - Utilizzo di Lock e Condition: Applicare
Lockper controllare l'accesso alle risorse condivise eConditionper coordinare i thread.
Il campo counter nella classe TaskLockExample è specificato per un motivo, sarà necessario verificarne il valore in ogni metodo e, a seconda di ciò che contiene, decidere se avviare o meno questo thread.
È inoltre necessario utilizzare i campi lock e condition per bloccare alcuni thread e decidere chi sarà primo, secondo, terzo.
Una volta implementati i metodi e passati alla classe Main ed eseguito il suo metodo main, dovresti ottenere un output indipendentemente dall'ordine e da quale thread esegue quale metodo.
Inoltre, stampa qualcosa sulla console per verificare se i metodi vengono eseguiti nel corretto ordine.
Puoi anche scambiare l'avvio dei thread (non l'implementazione stessa, ma dove viene chiamato il metodo start() del thread)
Una volta verificato che tutto funzioni correttamente, eseguire i test di verifica nel percorso /src/test/java/TaskLockExampleTest.java.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Can you explain how to use Lock and Condition to synchronize the traffic light methods?
What should the output look like to confirm the correct order?
Can you give an example of how the threads might call the methods in random order?
Awesome!
Completion rate improved to 3.33
Sfida: Lock e Condition
Scorri per mostrare il menu
Descrizione del Compito
Immagina di progettare un controllore del semaforo per un incrocio molto trafficato. Il sistema semaforico è composto da tre fasi: luce rossa, luce gialla e luce verde. Queste fasi devono essere eseguite in un ordine specifico per garantire un flusso di traffico sicuro ed efficiente.
Il tuo compito è implementare i metodi: redLight(), yellowLight() e greenLight(). Questi metodi devono essere eseguiti rigorosamente nell'ordine di un vero semaforo: prima la luce rossa, poi la luce gialla e infine la luce verde, indipendentemente dall'ordine in cui i thread li chiamano.
Requisiti:
- Sincronizzazione: Garantire che i metodi vengano eseguiti in ordine rigoroso;
- Multithreading: I metodi possono essere chiamati da thread diversi, ma l'esecuzione deve avvenire nell'ordine:
redLight(),yellowLight()egreenLight(); - Utilizzo di Lock e Condition: Applicare
Lockper controllare l'accesso alle risorse condivise eConditionper coordinare i thread.
Il campo counter nella classe TaskLockExample è specificato per un motivo, sarà necessario verificarne il valore in ogni metodo e, a seconda di ciò che contiene, decidere se avviare o meno questo thread.
È inoltre necessario utilizzare i campi lock e condition per bloccare alcuni thread e decidere chi sarà primo, secondo, terzo.
Una volta implementati i metodi e passati alla classe Main ed eseguito il suo metodo main, dovresti ottenere un output indipendentemente dall'ordine e da quale thread esegue quale metodo.
Inoltre, stampa qualcosa sulla console per verificare se i metodi vengono eseguiti nel corretto ordine.
Puoi anche scambiare l'avvio dei thread (non l'implementazione stessa, ma dove viene chiamato il metodo start() del thread)
Una volta verificato che tutto funzioni correttamente, eseguire i test di verifica nel percorso /src/test/java/TaskLockExampleTest.java.
Grazie per i tuoi commenti!