Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Sfida: Lock e Condition | Meccanismi di Sincronizzazione di Alto Livello
Multithreading in Java

bookSfida: 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() e greenLight();
  • Utilizzo di Lock e Condition: Applicare Lock per controllare l'accesso alle risorse condivise e Condition per coordinare i thread.
Note
Nota

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.

Note
Nota

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.

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 2

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Awesome!

Completion rate improved to 3.33

bookSfida: 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() e greenLight();
  • Utilizzo di Lock e Condition: Applicare Lock per controllare l'accesso alle risorse condivise e Condition per coordinare i thread.
Note
Nota

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.

Note
Nota

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.

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 2
some-alt