Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - jdk 1.5 e modello produttore consumatore
Forum - Java - jdk 1.5 e modello produttore consumatore

Avatar
Lodovica (Normal User)
Newbie


Messaggi: 8
Iscritto: 14/12/2005

Segnala al moderatore
Postato alle 10:31
Mercoledì, 14/12/2005
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 :)

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 14:08
Mercoledì, 14/12/2005
Testo quotato

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: https://piero.dev
PM Quote
Avatar
Lodovica (Normal User)
Newbie


Messaggi: 8
Iscritto: 14/12/2005

Segnala al moderatore
Postato alle 14:57
Mercoledì, 14/12/2005
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 :
Codice sorgente - presumibilmente Java

  1. public
  2. class
  3. MemoriaCircolare
  4. {
  5.         public
  6.         MemoriaCircolare
  7.         (
  8.                 int dimensione
  9.         )
  10.         {
  11.                 this.dimensione = dimensione;
  12.                 ingresso = 0;
  13.                 uscita = 0;
  14.                 buffer = new Object[ dimensione ];
  15.         }
  16.  
  17.         public
  18.         synchronized
  19.         void
  20.         deposita
  21.         (
  22.                 Object o
  23.         )
  24.         {
  25.                 while ( pieno() )
  26.                 {
  27.                         try
  28.                         {
  29.                                 this.wait();
  30.                         }
  31.                         catch ( InterruptedException ie ) {}
  32.                 }
  33.                 buffer[ ingresso ] = o;
  34.                 ingresso = ( ingresso + 1 ) % dimensione;
  35.                 this.notify();
  36.         }
  37.  
  38.  
  39.         public
  40.         synchronized
  41.         Object
  42.         preleva()
  43.         {
  44.                 while ( vuoto() )
  45.                 {
  46.                         try
  47.                         {
  48.                                 this.wait();
  49.                         }
  50.                         catch ( InterruptedException ie ) {}
  51.                 }
  52.                 Object valore = buffer[ uscita ];
  53.                 uscita = ( uscita + 1 ) % dimensione;
  54.                 this.notify();
  55.                 return valore;
  56.         }
  57.  
  58.         private
  59.         boolean
  60.         pieno()
  61.         {
  62.                 return ( ( ingresso + 1 ) % dimensione == uscita );
  63.         }
  64.  
  65.         private
  66.         boolean
  67.         vuoto()
  68.         {
  69.                 return ( ingresso == uscita );
  70.         }
  71.  
  72.         private int dimensione = 0;
  73.         private int ingresso = 0;
  74.         private int uscita = 0;
  75.         private Object[] buffer = null;
  76. }
  77. grazie a tutti per l'aiuto


PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 17:19
Domenica, 18/12/2005
Ho ricreato un esempio ex-novo con classe main che lo prova, ecco il sorgente:

Codice sorgente - presumibilmente Java

  1. import java.util.*;
  2.  
  3. public class Test {
  4. public static void main(String args[]) {
  5. Buffer<Integer> b = new Buffer<Integer>(10);
  6. new Produttore(b);
  7. new Consumatore(b);
  8. }
  9. }
  10.  
  11. class Buffer<T> {
  12. protected T element;
  13. protected boolean flagSet = false;
  14. public int max;
  15.  
  16. Buffer(int max) {
  17. this.max = max;
  18. }
  19.  
  20. synchronized T get() {
  21.  if(!flagSet) {
  22.   try {
  23.    wait();
  24.   } catch(Exception e) {}
  25.  }
  26.  
  27.  System.out.println("Consumato: " + element);
  28.  flagSet = false;
  29.  notify();
  30.  return element;
  31. }
  32.  
  33. synchronized void put(T element) {
  34.  if(flagSet) {
  35.   try {
  36.    wait();
  37.   } catch(Exception ex) {}
  38.  }
  39.  this.element = element;
  40.  flagSet = true;
  41.  System.out.println("Prodotto " + element);
  42.  notify();
  43. }
  44. }
  45.  
  46. class Produttore implements Runnable {
  47. Buffer b;
  48.  
  49. Produttore(Buffer b) {
  50. this.b = b;
  51. new Thread(this, "Produttore").start();
  52. }
  53.  
  54. public void run() {
  55. int i = 0;
  56. while(i <= b.max) {
  57. b.put(i++);
  58. }
  59. }
  60. }
  61.  
  62. class Consumatore implements Runnable {
  63. Buffer<Integer> b;
  64.  
  65. Consumatore (Buffer b) {
  66. this.b = b;
  67. new Thread(this, "Consumatore").start();
  68. }
  69.  
  70. public void run() {
  71. int i = 0;
  72. while(i <= b.max) {
  73. b.get();
  74. }
  75. }
  76. }



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

PM Quote
Avatar
Lodovica (Normal User)
Newbie


Messaggi: 8
Iscritto: 14/12/2005

Segnala al moderatore
Postato alle 13:52
Lunedì, 19/12/2005
sei un grande!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8-|
meno male... che mi hai aiutata...

PM Quote
Avatar
scuffio (Normal User)
Newbie


Messaggi: 9
Iscritto: 07/11/2007

Segnala al moderatore
Postato alle 19:07
Mercoledì, 02/04/2008
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 il 02/04/2008 alle 19:09
PM Quote