/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
?: data mellem tråde
Fra : anders hansen


Dato : 20-01-03 16:00

Hejsa, er der nogle anbefalede måder at udveksle data mellem tråde?

Jeg vil gerne undgå at skulle bruge en fil på disken som lager mellem
de to tråde ;)

/Anders

 
 
Michael Banzon (20-01-2003)
Kommentar
Fra : Michael Banzon


Dato : 20-01-03 16:19

"anders hansen" <newsmail0103@tiscali.dk> skrev i en meddelelse
news:Xns9309A2DE82195datamek@130.225.247.90...
> Hejsa, er der nogle anbefalede måder at udveksle data mellem tråde?
>
> Jeg vil gerne undgå at skulle bruge en fil på disken som lager mellem
> de to tråde ;)
>
> /Anders

Brug en Bounded buffer, med synchronized metoder, eller hvis der kun er
en dataretning kan du vidst bruge "pipes", selvom jeg foretrækker bb. Skriv
hvis du vil ha' noget kode...

/ Michael



Brian Matzon (20-01-2003)
Kommentar
Fra : Brian Matzon


Dato : 20-01-03 16:19

anders hansen wrote:
> Hejsa, er der nogle anbefalede måder at udveksle data mellem tråde?
>
> Jeg vil gerne undgå at skulle bruge en fil på disken som lager mellem
> de to tråde ;)
Hvad er det for en slags data - er det producer/consumer mellem en
producer og flere consumers eller?

Vi skal have noget mere at vide for at vi kan vurdere det _ordenligt_

men som udgangspunkt kan du lave en klasse som alle har en reference
til, som så har synchronized access

/Brian Matzon


anders hansen (20-01-2003)
Kommentar
Fra : anders hansen


Dato : 20-01-03 16:36

Ok - lidt mere:

Klasse 1 undersøger et bibliotek for nye filer, hvis den finder nogle
skal filnavnet tilføjes en vektor.

Klasse 2 skal bruge de oplysninger i vektoren for at kunne vise noget
statistik. Klasse 2 har endvidere startet Klasse 1 tråden, hvis det
hjælper?

/Anders

Brian Matzon (21-01-2003)
Kommentar
Fra : Brian Matzon


Dato : 21-01-03 00:46

anders hansen wrote:
> Ok - lidt mere:
>
> Klasse 1 undersøger et bibliotek for nye filer, hvis den finder nogle
> skal filnavnet tilføjes en vektor.
>
> Klasse 2 skal bruge de oplysninger i vektoren for at kunne vise noget
> statistik. Klasse 2 har endvidere startet Klasse 1 tråden, hvis det
> hjælper?
simpelt
Klasse 1 har en Vector, som den giver med til Klasse 2
Klasse 2 ligger ud med en
synchronized(vector) {
vector.wait()
}

når Klasse 1 er færdig med at scanne, laver den en:
synchronized(vector) {
vector.notifyAll();
}

klasse 2 ved så at klasse 1 er færdig, og kan gå amok på den vector.

-- gad ikke i seng :) --

import java.util.Vector;

/**
* <classdescription>
*
* @author Brian Matzon
* @revision $Revision$
*/
public class ThreadTest {

public ThreadTest() {

}

public void executeTest() {
new Thread(new Producer()).start();
}

   public static void main(String[] args) {
new ThreadTest().executeTest();
   }

/**
* This is the producing class - the one that also spawns the
consumer thread
*/
public class Producer implements Runnable {
/** Vector instance being shared */
private Vector vector;

/** Creates new Producer */
public Producer() {
vector = new Vector();
}

/** actual stuff to do*/
public void run() {
//spawn child
Thread child = new Thread(new Consumer(vector));

//sync on the vector, to guarentee that the parent
//thread (me) doesn't execute before the child thread has been
started
synchronized(vector) {
child.start();

//comment this try/catch out, to have a race condition
try {
vector.wait();
} catch (InterruptedException inte) {
            }
}

System.out.println("Child spawned");

//do stuff
for(int i=0;i<25;i++) {
vector.add(new Integer(i));
}
System.out.println("added elements");

//tell child we're done
synchronized(vector) {
vector.notifyAll();
}
System.out.println("notify");
}
}

/**
* This is the clas/thread that waits for something to do
*/
public class Consumer implements Runnable {
/** shared instance of vector */
private Vector vector;

public Consumer(Vector vector) {
this.vector = vector;
}

public void run() {
synchronized(vector) {
//notify parent thread that we have begun executing
vector.notifyAll();

try {
System.out.println("before wait");
vector.wait();
System.out.println("after wait");
} catch (InterruptedException inte) {
//called if thread is prematurely awakened
            }
}

//print contents of shared vector
for(int i=0;i<vector.size();i++) {
System.out.println(i + ": " + vector.elementAt(i));
}
}
}
}


anders hansen (21-01-2003)
Kommentar
Fra : anders hansen


Dato : 21-01-03 14:43

Tak Brian, tusind tak

/anders



DigiWizz (23-09-2005)
Kommentar
Fra : DigiWizz


Dato : 23-09-05 09:01

Hej Anders
Prøv at checke her:
http://oopweb.com/Java/Documents/ConcProgJava/VolumeFrames.html?/Java/Do
cuments/ConcProgJava/Volume/monitors.html

Som du ser, er der en hel del teori (og masser af faldgrupper), men
bare klø på - det er et spændende område!

--


Johnnie Hougaard Nie~ (23-09-2005)
Kommentar
Fra : Johnnie Hougaard Nie~


Dato : 23-09-05 09:12

> Prøv at checke her:
> http://oopweb.com/Java/Documents/ConcProgJava/VolumeFrames.html?/Java/Do
> cuments/ConcProgJava/Volume/monitors.html

Sidst opdateret 1997 - det er sgu en gammel sag

Der er sket meget siden, som f.eks. java.util.concurrent ....

DigiWizz (23-09-2005)
Kommentar
Fra : DigiWizz


Dato : 23-09-05 09:25

Johnnie Hougaard Nielsen wrote:

> > Prøv at checke her:
> > http://oopweb.com/Java/Documents/ConcProgJava/VolumeFrames.html?/Jav
> > a/Do cuments/ConcProgJava/Volume/monitors.html
>
> Sidst opdateret 1997 - det er sgu en gammel sag
>
> Der er sket meget siden, som f.eks. java.util.concurrent ....

Det var nu også mere teorien vedr. parallel programmering, jeg sigtede
til. Jeg er selv newbie indenfor Java (1 uge), så hvis du har
referencer til hvor jeg kan se mere om det nævnte lib (eller hvad det
nu hedder på java'sk) ville det være fint?

--


Soren (News) (23-09-2005)
Kommentar
Fra : Soren (News)


Dato : 23-09-05 12:58

"DigiWizz" <digiwizz@tele2adsl.dk> writes:

> Johnnie Hougaard Nielsen wrote:
>
> > > Prøv at checke her:
> > > http://oopweb.com/Java/Documents/ConcProgJava/VolumeFrames.html?/Jav
> > > a/Do cuments/ConcProgJava/Volume/monitors.html
> >
> > Sidst opdateret 1997 - det er sgu en gammel sag
> >
> > Der er sket meget siden, som f.eks. java.util.concurrent ....
>
> Det var nu også mere teorien vedr. parallel programmering, jeg sigtede
> til. Jeg er selv newbie indenfor Java (1 uge), så hvis du har
> referencer til hvor jeg kan se mere om det nævnte lib (eller hvad det
> nu hedder på java'sk) ville det være fint?

API . Og du kan finde det under java.util.concurrent i Java1.5.

Hvis du bruger noget mindre end 1.5 kan du kigge paa Doug Lea's impl.:
http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html

Mvh,
Soren

DigiWizz (23-09-2005)
Kommentar
Fra : DigiWizz


Dato : 23-09-05 16:26

Soren (News) wrote:

> "DigiWizz" <digiwizz@tele2adsl.dk> writes:
>
> > Johnnie Hougaard Nielsen wrote:
> >
> > > > Prøv at checke her:
> > > > http://oopweb.com/Java/Documents/ConcProgJava/VolumeFrames.html?
> > > > /Jav a/Do cuments/ConcProgJava/Volume/monitors.html
> > >
> > > Sidst opdateret 1997 - det er sgu en gammel sag
> > >
> > > Der er sket meget siden, som f.eks. java.util.concurrent ....
> >
> > Det var nu også mere teorien vedr. parallel programmering, jeg
> > sigtede til. Jeg er selv newbie indenfor Java (1 uge), så hvis du
> > har referencer til hvor jeg kan se mere om det nævnte lib (eller
> > hvad det nu hedder på java'sk) ville det være fint?
>
> API . Og du kan finde det under java.util.concurrent i Java1.5.
>
> Hvis du bruger noget mindre end 1.5 kan du kigge paa Doug Lea's impl.:
> http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/i
> ntro.html
>
> Mvh,
> Soren

Thnx a million, Soren - jeg var ikke klar over hvordan Java arrangerede
sine API'er - en hel del smartere end Windows mfc!
Jeg begynder at kunne se hvorfor Java er så populært ;)
- igen tak for hjælpen!
--


Søg
Reklame
Statistik
Spørgsmål : 177551
Tips : 31968
Nyheder : 719565
Indlæg : 6408843
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste