Slides:

Schema della lezione:
Obiettivo: presentare e motivare i thread ed introdurre il package
java.lang.reflect ed alcune sue applicazioni.
- I thread
- motivazioni
- stati e transizioni
- priorità e gruppi
- La riflessione: il package java.lang.reflect
- il problema dei contenitori
- le interfacce Marker
- "Cosa si può chiedere ad una classe?"
- Un metodo toString() generico
Materiale bibliografico:
- Horstmann, Capitolo 5 (Par. 5.4) per parte del materiale
sulla riflessione
- Sui thread posso suggerire il capitolo 1 del volume 2 del libro di
Horstmann "Java 2: Tecniche Avanzate" di Cay Horstmann e Gary Cornell.
- Nella documentazione distribuita dalla Sun ( /docs/guide/reflection/index.html)
c'è una guida sulla reflect.
- Nel tutorial della Sun si trova una sezione sui thread.
Altri link interessanti:
Domande per la auto-verifica della comprensione degli argomenti
Le domande più difficili vengono indicate con (*)
- Quale è la differenza tra thread e processo dal punto di vista del
programmatore?
- Per quale applicazioni i thread sono necessari (o almeno
semplificano di gran lunga la vita al programmatore)?
- Perché è necessario che un thread in Java possa essere ottenuto
senza dover ereditare dalla classe Thread (e quindi implementando la
interfaccia Runnable)?
- Quanti e quali sono gli stati in cui si può trovare un thread?
- Quali sono le transizioni di stato tra runnable e blocked
e viceversa?
- A cosa serve la priorità dei thread?
- Per quale motivo la priorità dei thread può essere dipendente dal
Sistema Operativo della piattaforma dove viene implementata la JVM?
- Perché è necessario avere metodi e oggetti sincronizzati?
- Cosa significa che un metodo a() di un oggetto A è sincronizzato? E'
possibile che, mentre un thread sta eseguendo a() (sincronizzato) un altro
thread esegua un metodo b() dello stesso oggetto A? E se il metodo b() è anche
esso sincronizzato?
- Cosa succede se un thread con alta priorità cerca di eseguire un
thread sincronizzato che è attualmente eseguito da un altro thread con più
bassa priorità?
- Cosa sono i singleton? In che contesto sono utili? Come possono
essere realizzati?
- Nella classe Singleton vista a lezione, è assolutamente necessario
che il metodo getInstance sia sincronizzato? E perché?
- Cosa significa che il metodo di una classe è sincronizzato? Durante
l'accesso di un thread ad un metodo di classe sincronizzato, è possibile che
un altro metodo di classe sincronizzato venga eseguito da un altro thread? Ed
un metodo (non di classe) sincronizzato? Ed un metodo non di classe non
sincronizzato?
- A cosa servono i gruppi di thread?
- Quale è il meccanismo di thread pooling per fornire servizi in
maniera efficiente?
- Cosa è il meccanismo della riflessione e da quali classi Java viene
implementato?
- A cosa serve il meccanismo della riflessione?
- (*) Perché le interfacce marker possono rappresentare un
aiuto a progettare programmi che siano dinamici e allo stesso tempo type-safe?
- (*) In che contesto le Run-time Type Information
(informazioni di tipo a run-time) possono essere di aiuto nello sviluppo di
una applicazione?
- Come si può usare il package reflect per realizzare un metodo
toString() generico?
- Come si può modificare il metodo toString() visto a lezione per
stampare anche i campi che sono array e tipi primitivi?
|