Oppure

Loading
14/12/05 9:31
Lodovica
ciao a tutti sono nuova di questo forum;
l'ho conosciuto grazie a netarrow :)
premetto che sono in cerca di aiuto e netarrow ha gi? fatto un bel po'... cmq...
conoscete il modello produttore consumatore con i monitor in java?
ecco... io devo prendere il codice ( che ho) ed aggiornarlo secondo le nuove specifiche della jdk 1.5... solo che non sono molto brava a programmare... c'? qualcuno che pu? darmi una mano? ringrazio gi? tutti coloro che mi vorranno/potranno aiutare :)
aaa
14/12/05 13:08
pierotofy
Postato originariamente da Lodovica:
conoscete il modello produttore consumatore con i monitor in java?


Intanto benvenuta nel forum.

A dir la verit? io non conosco questo modello produttore ecc. ecc. :-|
Qualcuno pu? dirmi cos'
Il mio blog: piero.dev
14/12/05 13:57
Lodovica
questo modello si usa per spiegare la sincronizzazione tra thread che accedono ad una risorsa comune...
quello che al momento x? mi interessa maggiormente ? realizzare queste modifiche dal vecchio codice al "nuovo"
vi posto sotto il codice di una classe che implementa una memoria circolare e che vorrei adattare utilizzando i generics :
public
class
MemoriaCircolare
{
	public
	MemoriaCircolare
	(
		int dimensione
	)
	{
		this.dimensione = dimensione;
		ingresso = 0;
		uscita = 0;
		buffer = new Object[ dimensione ];
	}

	public
	synchronized
	void
	deposita
	(
		Object o
	)
	{
		while ( pieno() )
		{
			try
			{
				this.wait();
			}
			catch ( InterruptedException ie ) {}
		}
		buffer[ ingresso ] = o;
		ingresso = ( ingresso + 1 ) % dimensione;
		this.notify();
	}


	public
	synchronized
	Object
	preleva()
	{
		while ( vuoto() )
		{
			try
			{
				this.wait();
			}
			catch ( InterruptedException ie ) {}
		}
		Object valore = buffer[ uscita ];
		uscita = ( uscita + 1 ) % dimensione;
		this.notify();
		return valore;
	}

	private
	boolean
	pieno()
	{
		return ( ( ingresso + 1 ) % dimensione == uscita );
	}

	private
	boolean
	vuoto()
	{
		return ( ingresso == uscita );
	}

	private int dimensione = 0;
	private int ingresso = 0;
	private int uscita = 0;
	private Object[] buffer = null;
}
grazie a tutti per l'aiuto

aaa
18/12/05 16:19
netarrow
Ho ricreato un esempio ex-novo con classe main che lo prova, ecco il sorgente:

import java.util.*;

public class Test {
public static void main(String args[]) {
Buffer<Integer> b = new Buffer<Integer>(10);
new Produttore(b);
new Consumatore(b);
}
}

class Buffer<T> {
protected T element;
protected boolean flagSet = false;
public int max;

Buffer(int max) {
this.max = max;
}

synchronized T get() {
 if(!flagSet) {
  try {
   wait();
  } catch(Exception e) {}
 }

 System.out.println("Consumato: " + element);
 flagSet = false;
 notify();
 return element;
}

synchronized void put(T element) {
 if(flagSet) {
  try {
   wait();
  } catch(Exception ex) {}
 }
 this.element = element;
 flagSet = true;
 System.out.println("Prodotto " + element);
 notify();
}
}

class Produttore implements Runnable {
Buffer b;

Produttore(Buffer b) {
this.b = b;
new Thread(this, "Produttore").start();
}

public void run() {
int i = 0;
while(i <= b.max) {
b.put(i++);
}
}
}

class Consumatore implements Runnable {
Buffer<Integer> b;

Consumatore (Buffer b) {
this.b = b;
new Thread(this, "Consumatore").start();
}

public void run() {
int i = 0;
while(i <= b.max) {
b.get();
}
}
}


Il risultato ?:

Prodotto 0
Consumato: 0
Prodotto 1
Consumato: 1
Prodotto 2
Consumato: 2
Prodotto 3
Consumato: 3
Prodotto 4
Consumato: 4
Prodotto 5
Consumato: 5
Prodotto 6
Consumato: 6
Prodotto 7
Consumato: 7
Prodotto 8
Consumato: 8
Prodotto 9
Consumato: 9
Prodotto 10
Consumato: 10

Quindi ? funzionante :k:

ciao
aaa
19/12/05 12:52
Lodovica
sei un grande!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8-|
meno male... che mi hai aiutata...
aaa
02/04/08 17:07
scuffio
Ciao, mi potrsti mostrare come modificare questo codice affinchè il produttore legga N righe di un file , mentre il consumatore le utilizza ?
Naturalmente il tutto deve fermarsi quando non ci sono piu righe da leggere. Ringrazio anticipatamente dell'attenzione.
Ultima modifica effettuata da scuffio 02/04/08 17:09
aaa