Archivio Esercizi Facili
Alcuni esercizi semplici per cominciare a far pratica con la programmazione multithreaded:
Scrivere un programma che crea 5 Thread a cui deve essere assegnato un nome differente. Ogni thread stampa ciclicamente il proprio nome su standard output. Ogni stampa deve essere effettuata su una singola linea e non deve essere interrotta dalle stampe degli altri thread.
Si vogliono sincronizzare dei threads di tipo "Utilizzatore" sull'utilizzo di una struttura dati condivisa di tipo "Contatore".
In particolare, si deve definire:una classe Contatore che fornisce i metodi necessari per gestire un contatore. Le operazioni possibili sono reset() (imposta il contatore a zero), inc() (aumenta il contatore di 1) e dec() (decrementa il contatore di 1). I metodi pubblici del Contatore devono essere Thread-Safe.
un tipo di thread Utilizzatore, che ad intervalli casuali modifica il valore del contatore usando i metodi di quest'ultimo
Estensione dell'esercizio 2.
Arricchire la classe "Contatore" di un metodo attendi(n) che rimane in attesa che il contatore raggiunga il valore "n" ricevuto come parametro.
Modificare "Utilizzatore" in modo da fargli usare solo i metodi inc() e dec().
Definire un nuovo tipo di thread, "Azzeratore", che, scelto casualmente un valore n!=0, aspetti che il contatore raggiunga il valore n per poi impostarlo a zero.
Conto Bancario:
Progettare un’applicazione che simuli l’implementazione di un conto bancario, quindi programmare le classi per la gestione delle operazioni di prelievo e deposito su un conto.
In particolare, si deve prevedere:
una classe ContoBancario che mette a disposizione operazioni per
o depositare una certa somma sul conto o prelevare una somma dal conto (solo se la somma è disponibile, il conto non ammette la possibilità di andare "in rosso") o verificare il saldo corrente (cioè quanto c'è sul conto bancario allo stato attuale)
una classe Correntista che è il thread autorizzato ad effettuare operazioni di deposito e prelievo sul ContoBancario
una classe Controllore che è il thread autorizzato ad effettuare operazioni di controllo sul saldo attuale del conto
un main che avvia l'applicazione, creando un ContoBancario, più threads di tipo Correntista che accedono allo stesso conto ed un thread di tipo Controllore.