Definizione di Thread.
Un thread è un’unità di esecuzione all’interno di un processo.
Un processo può contenere:
- uno o più thread
- spazio di memoria condiviso
- risorse comuni (file, heap)
Distinzione fondamentale:
| Processo | Thread |
| Spazio di memoria separato | Condivide memoria del processo |
| Più costoso | Più leggero |
| Comunicazione tramite IPC | Comunicazione diretta |
Contesto architetturale.
Modello di esecuzione.



Il sistema operativo:
- assegna thread ai core della CPU
- gestisce il context switching
- pianifica l’esecuzione (scheduler)
Tipi di parallelismo:
- Concorrenza (apparente, time slicing)
- Parallelismo reale (multi-core)
Ciclo di vita di un thread.
Stati principali:
- New
- Runnable
- Running
- Blocked / Waiting
- Terminated
Il passaggio tra stati è gestito dallo scheduler del sistema operativo.
Perché usare il threading?
Obiettivi principali:
- Migliorare le prestazioni
- Sfruttare CPU multi-core
- Migliorare la responsività (es. GUI)
- Gestire operazioni I/O bloccanti
Esempi concreti:
- Server web
- Applicazioni bancarie
- Elaborazione parallela di dati
- Rendering grafico
Problemi del threading.
Race condition.
Due thread accedono contemporaneamente a una risorsa condivisa.
Deadlock.
Due o più thread si bloccano reciprocamente.
Starvation.
Un thread non ottiene mai risorse.
Livelock.
Thread attivi, ma senza progresso reale.
Sincronizzazione.
Per evitare problemi si usano:
- Mutex
- Lock
- Semafori
- Monitor
- Variabili atomiche
Concetto chiave:
Sezione critica
lock()
accesso alla risorsa condivisa
unlock()
Threading nei linguaggi (esempio Java).
class MioThread extends Thread {
public void run() {
System.out.println(“Thread in esecuzione”);
}
}
MioThread t = new MioThread();
t.start();
Oppure con Runnable:
Runnable r = () -> {
System.out.println(“Thread attivo”);
};
new Thread(r).start();
Concetti:
- start() vs run()
- join()
- synchronized
Modelli di concorrenza moderni.
Evoluzione:
- Thread pool
- Executor framework
- Programmazione asincrona
- Future / Promise
- Reactive programming
Thread vs Processi vs Async.
Distinguere:
- Multi-threading → condivisione memoria
- Multi-processing → isolamento
- Programmazione asincrona → non blocca flusso principale
Collegamento alla classe B016.
In un Istituto Tecnico, introdurrei il concetto di threading nel quinto anno, dopo aver consolidato sistemi operativi e programmazione a oggetti, attraverso simulazioni di server multi-thread e gestione di risorse condivise.
Attività di laboratorio.
- Simulazione conto bancario con race condition
- Implementazione produttore-consumatore
- Analisi di deadlock
- Confronto prestazioni single vs multi-thread
Competenze sviluppate.
- Comprensione architettura sistemi
- Consapevolezza della concorrenza
- Analisi delle prestazioni
- Debug avanzato
Inclusione BES/DSA.
- Schemi visivi dei thread
- Simulazioni con diagrammi temporali
- Esempi concreti (sportello bancario)
- Semplificazione iniziale con pseudocodice
Collegamenti interdisciplinari.
- Sistemi operativi (scheduler)
- Architettura degli elaboratori (multi-core)
- Reti (server concorrenti)
- Cybersecurity (race condition come vulnerabilità)
Il threading rappresenta un concetto chiave dell’informatica moderna, poiché consente di comprendere la concorrenza, l’uso efficiente delle risorse hardware e le problematiche di sincronizzazione, integrando aspetti teorici di sistemi operativi con applicazioni pratiche di sviluppo software.
Schema rapido da memorizzare.
- Definizione
- Processo vs Thread
- Scheduler e stati
- Motivazioni
- Problemi (race, deadlock)
- Sincronizzazione
- Esempi linguistici
- Attività laboratoriale
- Conclusione
