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.