O modalitate deosebit de utila prin care doua fire de executie pot comunica este realizata prin intermediul canalelor de comunicatii (pipes). Acestea sunt implementate prin fluxuri descrise de clasele
PipedReader, PipedWriter - pentru caractere, respectivConstructorii acestor clase sunt :
In cazul īn care este folosit constructorul fara argument conectarea unui flux de intrare cu un flux de iesire se face prin metoda connect
public void connect( PipedWriter pw ) throws IOExceptionIntrucāt fluxurile care sunt conectate
printr-un pipe trebuie sa execute simultan operatii de scriere/citire folosirea
lor se va face īn cadrul unor fire de executie.
Functionarea obicetelor care instantiaza PipedWriter si PipedReader
este asemanatoare cu a canalelor UNIX (pipes). Fiecare capat al unui canal este
utilizat dintr-un fir de executie separat. La un capat al pipeline-ului se
scriu caractere, la celalalt se citesc. La citire, daca nu sunt date disponibile
firul de executie se va bloca. Se observa ca acesta este un comportament tipic
producator-consumator, firele de executie comunicānd printr-un canal.
Realizarea conexiunii se face astfel:
Scrierea si citirea pe/de pe canale se
realizeaza prin metodele uzuale read si write īn toate formele
lor.
Sa reconsideram acum exemplul producator/consumator folosind canale de
comunicatie.
Producatorul trimite datele printr-un flux de iesire de tip DataOutputStream catre consumator care le primeste printr-un flux de intrare de tip DataInputStream. Aceste doua fluxuri sunt interconectate prin intermediul unor
fluxuri de tip "pipe".
|