Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Guida all'utilizzo di Java: Strumenti di Eclipse, processi e thread, Appunti di Programmazione Java

Una panoramica sui vari strumenti disponibili nella vista centrale di Eclipse per sviluppare il codice Java. Inoltre, fornisce informazioni sui processi e i thread in Java, inclusi i loro stati e le differenze tra di essi. Il documento include anche esercizi per capire meglio i concetti trattati.

Tipologia: Appunti

2020/2021

Caricato il 23/01/2021

gulu-paciozzo
gulu-paciozzo 🇮🇹

4

(1)

2 documenti

1 / 9

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
30 Settembre 2020
Prove in itinere
Prova pratica
Esercitazioni durante il corso
Eclipse è un ambiente di sviluppo integrato (Integrated Development Environment) multi-linguaggio e multi
piattaforma scritto in Java. E’ Open Source. Eclipse è uno fra gli IDE più utilizzati perché racchiude in un
unico ambiente tutti gli strumenti utili durante la programmazione. Editor, compilatore, debugger.
SCHERMATA PRINCIPALE
La schermata principale di Eclipse può essere vista ocme un contenitore, che prende il nome di Prospettiva,
Perspective. Ogni area della schermata è detta View.
Ognuna delle View contiene degli strumenti per lavorare al codice:
Vista centrale ci consente di SCRIVERE il programma
“Package explorer” a sinistra mostra tutti i file
“Outline” a destra mostra informazioni sulla classe corrente
“Problems” in basso riporta eventuali errori di compilazione
“Console” ci consente di interagire con il programma in esecuzione.
Sono raggruppamenti di funzionalità dell’IDE. La Java perspective riunisce strumenti di stesura e
organizzazione del codice, mentre la Debug Perspective fornisce strumenti in fase di debug.
Saper organizzare il codice, solitamente per progetti/esercizi che riguardano le lezioni si può gestire il tutto
all’interno di un progetto. E’ utile organizzare le classi nei progetti.
La class va i src, di solito si possono anche avere cartelle esterne ed in src possono esserci più cartelle.
Il codice può essere generato bianco (con la spunta static void main)
Sui metodi che andiamo a implementare dobbiamo INSERIRE i nostri commenti, perché commentare il
codice permette di valutare meglio cosa stiamo facendo e dove c’era l’errore.
https://stackoverflow.com/questions/51133398/invalidmoduledescriptorexception-when-
running-my-first-java-app
Esercizio 1:
Stampare la figura
La classe Math è una classe finale. Non possono essere estese nuove classi.
Double numeroCasuale = Math.random(); //restituisce un numero casuale
pf3
pf4
pf5
pf8
pf9

Anteprima parziale del testo

Scarica Guida all'utilizzo di Java: Strumenti di Eclipse, processi e thread e più Appunti in PDF di Programmazione Java solo su Docsity!

30 Settembre 2020  Prove in itinere  Prova pratica  Esercitazioni durante il corso Eclipse è un ambiente di sviluppo integrato (Integrated Development Environment) multi-linguaggio e multi piattaforma scritto in Java. E’ Open Source. Eclipse è uno fra gli IDE più utilizzati perché racchiude in un unico ambiente tutti gli strumenti utili durante la programmazione. Editor, compilatore, debugger. SCHERMATA PRINCIPALE La schermata principale di Eclipse può essere vista ocme un contenitore, che prende il nome di Prospettiva, Perspective. Ogni area della schermata è detta View. Ognuna delle View contiene degli strumenti per lavorare al codice:  Vista centrale ci consente di SCRIVERE il programma  “Package explorer” a sinistra mostra tutti i file  “Outline” a destra mostra informazioni sulla classe corrente  “Problems” in basso riporta eventuali errori di compilazione  “Console” ci consente di interagire con il programma in esecuzione. Sono raggruppamenti di funzionalità dell’IDE. La Java perspective riunisce strumenti di stesura e organizzazione del codice, mentre la Debug Perspective fornisce strumenti in fase di debug. Saper organizzare il codice, solitamente per progetti/esercizi che riguardano le lezioni si può gestire il tutto all’interno di un progetto. E’ utile organizzare le classi nei progetti. La class va i src, di solito si possono anche avere cartelle esterne ed in src possono esserci più cartelle. Il codice può essere generato bianco (con la spunta static void main) Sui metodi che andiamo a implementare dobbiamo INSERIRE i nostri commenti, perché commentare il codice permette di valutare meglio cosa stiamo facendo e dove c’era l’errore. https://stackoverflow.com/questions/51133398/invalidmoduledescriptorexception-when- running-my-first-java-app Esercizio 1: Stampare la figura La classe Math è una classe finale. Non possono essere estese nuove classi. Double numeroCasuale = Math.random(); //restituisce un numero casuale

18 Novembre 2020 I programmi Java effettuano operazioni tramite stream, flussi. Bisogna definire stream di output/input prima di poterli eseguire. La comunicazione è UNIVOCA. Se è output fa output, se è input, legge. SORGENTI E DESTINAZIONI  Sorgenti: es. tastiera, solo input  Destinazioni: come video, solo output  Sia sorgenti che destinazioni: file o connessioni di rete, a cui possiamo collegare stream di output ed input DIAPOSITIVE GUIDE Le operazioni sugli stream I/O si eseguono in 3 passi:  Open  Read  Close Per utilizzare il FILEREADER:

  1. Passare al costruttore il nome del file come stringa: Filereader reader = new FileReader (“prova .txt”);
  2. Chiamare il metodo read() che legge un carattere alla volta: int next = reader.read (); //restituisce - 1 se il file è terminato, altrimenti l’intero può essere castato a char e usato nel programma.
  3. Chiudere lo stream invocando il metodo close() o reader.close() 25 Novembre 2020 PROGRAMMAZIONE CONCORRENTE IN JAVA MODULO B Una delle potenti caratteristiche del linguaggio Java è il supporto alla programmazione concorrente. Permette di organizzare il codice in modo da poter eseguire contemporaneamente più parti di codice differenti fra loro. Ad oggi è supportata da tutti i moderni sistemi operativi. SISTEMI OPERATIVI Con il termine SO si intende l’insieme di programmi e librerie che opera direttamente sulla macchina fisica, mascherandone le caratteristiche specifiche e fornendo agli utenti un insieme di funzionalità di alto livello. Il sistema operativo fornisce all’utente vari strumenti, quale un ambiente per l’esecuzione di altri programmi e una visione astratta dell’hardware. Principali scopi:

STATI DI UN PROCESSO

Un processo, durante la sua esistenza può trovarsi in vari stati:

  • Init: stato transitorio durante il quale il processo viene caricato in memoria e il SO inizializza i dati che lo rappresentano
  • Ready: stato in cui il processo è pronto per acquisire la CPU
  • Running: stato in cui il processo sta utilizzando la CPU
  • Waiting: stato in cui il processo è sospeso in attesa di un evento
  • Terminated: stato transitorio relativo alla fase di terminazione e deallocazione del processo di memoria THREAD Processi leggeri:
  • Attività autonoma che “vive” in un processo
  • Tutti i thread appartenenti allo stesso processo condividono il medesimo spazio di indirizzamento (le variabili globali in RAM)
  • Le sue variabili locali di una procedura sono private e non condivise da altri thread I thread possono comunicare tra loro in modo semplice lo spazio di memoria condiviso. Occorre però disciplinare l’accesso a tale area comune attraverso opportuni meccanismi di sincronizzazione che vedremo in seguito. Più thread possono condividere riferimenti allo stesso oggetto ed interagire tramite esso. DIFFERENZA FRA PROCESSI E THREAD Il concetto di processo è associato, ma distinto da thread con cui si intende l’unità granulare in cui un processo può essere suddiviso (sottoprocesso) e che può essere eseguito a divisione di tempo o in parallelo ad altri. Un thread è una parte del processo che viene eseguita in maniera concorrente ed indipendente internamente allo stato generale del processo stesso. Un processo HA SEMPRE ALMENO UN THREAD (se stesso), ma in alcuni casi un processo può avere più thread che vengono eseguiti in parallelo. Una differenza consiste nel modo in cui condividono le risorse. Di solito i processi sono indipendenti, i thread di un processo tipicamente condividono le medesime info di stato, la memoria ed altre risorse di sistema. Dal MECCANISMO DI ATTIVAZIONE è chiara la differenza:
  • Creazione di un nuovo processo è onerosa per il sistema, in quanto devono essere allocate risorse necessarie alla sua esecuzione (allocazione memoria, riferimenti a periferiche, ecc…)
  • Il thread è parte di un processo e una sua nuova attivazione viene effettuata in tempi ridotti e costi minimi Una definizione per chiarire:
  • Il processo è l’oggetto del SO a cui sono assegnate tutte le risorse di sistema per l’esecuzione di un programma, tranne la CPU
  • Il thread è l’oggetto del sistema operativo o dell’applicazione a cui è assegnata la CPU per l’esecuzione

PROGRAMMAZIONE MULTITHREADING IN JAVA

La gestione dei thread in Java è indipendente dalla piattaforma sottostante. Un thread è caratterizzato da:

  • Un corpo
  • Uno stato
  • Un gruppo di appartenenza
  • Una priorità La classe principale è java.lang.Thread e l’interfaccia java.lang.Runnable STATI DI UN THREAD
  • Un thread può essere in ESECUZIONE
  • Può essere PRONTO per l’esecuzione non appena ottiene la CPU per essere eseguito
  • Può essere sospeso
  • Può essere ripreso
  • Può essere bloccato in attesa di risorsa
  • Può essere terminato in qualunque momento Ciclo di vita di un thread
  • New Thread: creato dopo l’istruzione new, con variabili allocate e inizializzate; in attesa di passare a eseguibile
  • Runnable thread: in esecuzione, o in coda di attesa per l’ottenere utilizzo CPU
  • Not Runnable: il thread non può essere messo in esecuzione dallo scheduler. Entra in questo stato quando in attesa di un operazione di I/O o dopo l’invocazione dei metodi suspend(), wait(), sleep()
  • Dead: al termine “naturale” dell’esecuzione o dopo l’invocazione del metodo stop() da parte di un altro thread PRIORITA’ DEI THREAD Java assegna una priorità che determina come deve essere considerato quel thread rispetto agli altri. La priorità dei thread è espressa come un intero che specifica la priorità relativa in confronto ad un altro thread e viene utilizzato per decidere come passare da un thread all’altro. Un thread può volontariamente rinunciare al controllo concedendo o bloccando esplicitamente l’I/O in attesa. Un thread può essere soppiantato da un thread con priorità più alta a prescindere da ciò che stava facendo. THREAD PRINCIPALE In java, quando un programma viene avviato, è già presente un thread di esecuzione, principale. E’ importante perché:
  • Da lui nascono gli altri thread
  • Deve essere l’ultimo che termina l’esecuzione. CREAZIONE DI UN THREAD Gli oggetti istanza di tale classe svolgono la funzione di interfaccia verso la JVM che è l’unica capace di creare nuovi thread

Dato che serve il main, istanziamo una nuova classe: public class EsempioMain { public static void main(String[] args) { EsempioThread t = new EsempioThread(); t.start(); } } L’utilizzo del metodo start() equivale a porre l’eleggibilità per essere messo in esecuzione. ALCUNI METODI DI THREAD Public void start() //lancia Public void run () //esegue Public final void stop() //distrugge il thread Public final void suspend() //sospende Public final void resume //riattiva Public static void sleep(long n) //sospende il thread per n ms Public final void setPriority(int priority) //modifica la priorità Public final int getPriority() //ottiene priorità corrente Public static void yield //rischedula, va ad agire su l’informazione dello scheduler, lo richiama Public final native boolean isAlive() //true se il thread è vivo METODI DELLA CLASSE THREAD: run(): contiene istruzioni che il thread esegue, di suo non fa nulla, va sovrascritto con estensioni slides… join() blocca il thread chiamante in attesa della terminazione del thread di cui si invocca il metodo. Anche con timeout UTILIZZO DELL’INTERFACCIA RUNNABLE Vi sono casi in cui il ricorso ad un’estensione della classe Thread nnon è adatto a scopi:

  • L’oggetto per il quale si vuole avviare un thread è già estensione di una qualche altra classe (quindi non può estendere anche Thread)
  • Si vogliono avere molteplici thread dentro la stessa istanza di oggetto, è impossibile estendendo Thread La risposta è data dall’interfaccia Runnable, che include un solo metodo, run(). Il metodo run() è anche dichiarato nell’interfaccia Runnable. Quando si sceglie di definire un thread che implementa l’interfaccia Runnable è ancora possibile estendere qualsiasi altra classe. Quando più thread vengono creati implementando l’interfaccia Runnable… 2 Dicembre 2020 Esempio Runnable: conta fino a 10. public class ContaFinoADieci implements Runnable { public void run() { for(int i=0; i<10; i++) System.out.print((i+1)+” “); } } E poi: ContaFinoADieci contatore = new ContaFinoADieci(); Thread threadContatore = new Thread(contatore); … threadContatore.start(); Si possono avere 2 tipi di interazione:
  • Fra thread dello stesso tipo
  • Fra thread di tipo diverso Import java.io.*; public class PingPong { //il main crea e lancia i thread Public static void main(String[] a) { Ping c= new Ping(); Pong t=new Pong();