lezione 08

concorrenza e executor

thread pool, callable e strumenti java.util.concurrent.

livello: intermedio durata: 38 min output: task scheduler badge: concurrency core

panoramica

java offre un ecosistema completo per la concorrenza con executor, futures e strumenti di sincronizzazione.

preferisci executor al thread manuale: più controllo e gestione del pool.

executor service

crea un pool con Executors e invia task con submit.

ExecutorService pool = Executors.newFixedThreadPool(4);
Future<Integer> result = pool.submit(() -> 21 * 2);
int value = result.get();
pool.shutdown();

sincronizzazione

usa synchronized o Lock per sezioni critiche.

private final Object lock = new Object();

void safeIncrement() {
    synchronized (lock) {
        counter++;
    }
}

strutture thread-safe

collezioni concurrent riducono boilerplate: ConcurrentHashMap, BlockingQueue.

  • usa blockingqueue per pipeline
  • favorisci atomic per contatori
  • evita lock annidati

esercizi

crea un job scheduler con ScheduledExecutorService.

implementa un rate limiter con Semaphore.

checklist

  • usa executor per task paralleli
  • chiudi pool con shutdown
  • proteggi le risorse condivise
  • misura la latenza

panoramica

In questo capitolo su concorrenza e executor, thread pool, callable e strumenti java.util.concurrent. L'obiettivo è trasformare i concetti in micro-pattern riutilizzabili con esempi piccoli e verificabili.

Lavora in sequenza: leggi, prova, modifica gli snippet e annota i trade-off principali (performance, leggibilità, manutenzione).

badge: concurrency core

obiettivi

  • capire e applicare panoramica in uno scenario reale
  • capire e applicare executor in uno scenario reale
  • capire e applicare sincronizzazione in uno scenario reale
  • capire e applicare strutture thread-safe in uno scenario reale

scheda rapida

import java.util.List;

public class Main {
  public static void main(String[] args) {
    var dati = List.of(1, 2, 3);
    var out = dati.stream().map(x -> x * 2).toList();
    System.out.println(out);
  }
}

Adatta questo scheletro agli esempi della lezione e sostituisci i dati con il tuo dominio.

tips

  • organizza package per dominio
  • preferisci immutabilità dove possibile
  • documenta le API pubbliche
  • proteggi stato condiviso
  • usa synchronized o Lock
  • evita deadlock con ordine dei lock

tip: Se puoi evitare lo stato condiviso, fallo.

mini progetto

Contatore thread-safe.

  • implementa contatore
  • sincronizza incrementi
  • test con multi-thread
  • verifica consistenza

output atteso: uno script o query ripetibile con risultati verificabili.

start a brief