Escolar Documentos
Profissional Documentos
Cultura Documentos
Il compito eseguito dai thread (analogo per entrambi) è quello contenuto nel corpo del proprio
metodo run nel quale esso non fa altro che ciclare fino a che dal buffer contenente i caratteri del file
non si legga il carattere sentinella -1; nel caso in cui si legga un carattere valido si incrementa il
contatore e l’indice riferito al buffer di caratteri, se il prossimo carattere che arriverà in ingresso non
appartiene alla sequenza propria del thread, questo stampa il valore del contatore di sequenza e lo
inserisce nell’oggetto che tiene conto di tutte le dimensioni, ovvero seqMax.
Se il successivo carattere è invece il terminatore se inserisce la nuova sequenza e si rompe il ciclo,
eseguendo poi la release(); che indica al main la fine della propria esecuzione
Il main, ricevuti e segnali temporale da tutti e due i thread, da seqMax, ottiene quella che è la
sequenza di dimensioni maggiori.
Merita una piccola analisi l’oggetto di tipo Max: esso è l’oggetto che tiene conto di informazioni
vitali riguardanti tutto il processo risolutivo, permette di introdurre il concetto di indice che
rappresenta il puntatore all’elemento puntato nel buffer di caratteri senza segno; ad esso sono
dedicati due metodi getIndice e setIndice che sono dichiarati di tipo synchronized poiché la
scrittura simultanea su di essi può causare conflitti (ciò è stato verificato da alcune prove).
Tale oggetto mantiene inoltre l’array vectCount che funge da vettore di contatori (interi) di tutte le
sequenze, dove i thread ne aggiungono di nuovi con il metodo insertCount ed il main ricava la
dimensione della sequenza più grande tramite il metodo getMax dove si scorrono tutti gli elementi
per poi confrontarli con max, inizializzato a zero.