Avatar billede languy-uk Nybegynder
18. marts 2000 - 23:41 Der er 5 kommentarer

Multiple threads and shared resources

God aften,

Jeg har et problem mht at allokerer faelles resourcer til flere threads. Har en mistanke om at det kan loeses med Threads groups men er ikke sikker???

Er der nogen, der har en anelse om hvordan to eller flere traade kan faa adgang til de samme variabler i en anden klasse???
Avatar billede theill Nybegynder
19. marts 2000 - 00:28 #1
Jeg tror, du bliver noedt til at smide noget sample kode, da det ellers bliver en smule for abstrakt.

Der er mange forskellige muligheder for flere traade at faa adgang til delte variabler.
Avatar billede andersb Nybegynder
20. marts 2000 - 08:54 #2
Her er et generelt skelet [pseudo-syntaks]
obj = new FællesData(...);
Thread tråd1 = new MinTråd(obj);
Thread tråd2 = new MinAndenTråd(obj);
tråd1.start(); tråd2.start();

Nu har begge tråde adgang til obj - hvis du altså har lavet constructor i MinTråd og MinAndenTråd korrekt.

Her er et simpelt eksempel med en bankkonto (fælles data) og 2 tråde (forsøger at hæve på kontoen) http://www.rhs.dk/anders/fos2000f/JavaTraade/account/AccountSimple.java
Der er flere eksempler her http://www.rhs.dk/anders/fos2000f/ugeplan.htm [uge 10+11].
- Anders
Avatar billede languy-uk Nybegynder
21. marts 2000 - 17:31 #3
Lige en add...

Traadene skal bruges i forbindelse med publisher-subscriber pattern og den ressource, der netop skal deles er min EventChannel. Der skal vaere saa lidt synkronisering som overhovedet muligt, da det skal fungerer asynkront. Fx en thread til:

- afsendelse (publisher)
- distrubutoer (eventchannel)
- modtagelse (subscriber)

Har proevet at lave et thread hiarki paa foelgende maade (men faar kun Null Pointers udfra eventChannel)

class SuperThread extends Thread {
  private EventChannel channel
  private Publisher pub
  public SuperThread(String name) {
    super(name)
  }
  public void add(Subscriber s) {
    channel.attach(s);
  }
}
//for hver traad flg:

class distrThread extends SuperThread {
  public publishThread(String name) {
    super(name)
  }
  pubic void run() {
  /* Null Pointer Exception her! */
    channel.distribute(pub); //<--NULL?
  }
}

---
main(){

  Socket cs; //client socket
  /* Forbindelse etableret! */
  Subscriber sub = new Subscriber(cs);
  Traad.add(sub);
}

I den rigtige kode er der brugt Try/catch og brugt en if (cs != null) {}

Haaber i kan hjaelpe!
Avatar billede languy-uk Nybegynder
21. marts 2000 - 17:34 #4
Rettelse:

Attributterne til SuperThread er protected!

class SuperThread extends Thread {
  protected EventChannel channel
  protected Publisher pub
Avatar billede landlordma Nybegynder
15. december 2004 - 01:45 #5
Du kan gøre objected som skal bruges af flere tråde static og så bruge synchronized når du vil tilgå objected så der kun er en tråd der bruger objected af gangen.

lille kode eksempel to chat program:

private void sendToAllServerThreads(String message) {
  for(int i = 0; i < threadVector.size(); i++) {
    synchronized(threadVector) {
      ServerThread worker = (ServerThread)threadVector.elementAt(i);
      //Send message to current server thread 
      worker.sendMessage(message);
    }
  }
}

serverVector bruges af flere tråde!!!

/MortenAGoDa
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester