Precedente Progr. Distribuita Successiva

7:Thread e Riflessione

[Slide]
 [Schema]
 [Riferimenti]
 [Link]
[Auto-verifica]

[Inizio pagina]

Slides:


[Inizio pagina]

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

[Inizio pagina]

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.

[Inizio pagina]

Altri link interessanti:


[Inizio pagina]

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?

Modificato il: 28/11/2003
Vittorio Scarano
Dipartimento di Informatica ed Applicazioni "R.M. Capocelli"
Università degli Studi di Salerno
vitsca@unisa.it