Avatar billede boiii Nybegynder
07. april 2004 - 14:46 Der er 5 kommentarer og
1 løsning

Socket threads og shared hashtable

Hej, Jeg har lavet en socketserver klasse der accepter forbindelser fra klienter og deler dem ud i threads:

public class SocketServer
{
public void acceptConnection() throws Exception
{
Hastable ht = new Hashtable();
while(true)
{
  SocketServerService sss;
  try
  {
    sss = new SocketServerService(servSock.accept());
    clients = clients +1;
    sss.setName("T"+clients);
    sss.start();
    }
    catch (Exception e)
    {
    System.out.println("Accept failed"+e);
    System.exit(-1);
    }
}
}
}
Min SocketServerService klasse håndter input/output. Mit spørgesmål er så hvis der feks er 4 SocketServerService threads og jeg gerne vil have de skal skrive i en hashtabel som er i ServerSocket klassen hvordan skulle jeg bære mig an?De skal bare skrive i hver deres entry af hastabellen, skal jeg bare sende hashtable'en med : sss = new SocketServerService(servSock.accept(),s,ht);
Avatar billede arne_v Ekspert
07. april 2004 - 14:53 #1
Det var en oplagt mulighed at sende den med som argument til constructor, så
der kan gemmes en referance til den.
Avatar billede boiii Nybegynder
07. april 2004 - 14:58 #2
Da der højst kommer til at være 4 threads som har et navn hver vil jeg bruge threads navne som key i hashtable og på den måde sørge for at hver thread kun skriver i sin egen slot,kan jeg på denne måde undgå at lave hashtabellen synchronized? Jeg vil nemlig gerne et niveau længere nede så der ikke blockes for hele tabellen hvis man gerne vil lave read på den
Avatar billede boiii Nybegynder
07. april 2004 - 15:26 #3
Hmmmmm en Hashtable er synchronized i forvejen tror jeg...
Avatar billede arne_v Ekspert
07. april 2004 - 16:09 #4
Ja - det er forskellen på Hashtable og HashMap.
Avatar billede boiii Nybegynder
07. april 2004 - 17:21 #5
Liiiige et sidste spørgesmål så håber jeg du svarer så jeg kan tldele dig points. Hvis jeg i en HashMap putter 3 vectors så vil alle tråde kunne få adgang til denne men hvis de gerne vil have adgangen til vector vil det blive en ad gangen,har jeg ret?
Avatar billede arne_v Ekspert
07. april 2004 - 17:34 #6
Nej.

Hashtable vil sikre at hvis en tråd ligger noget ind i Hashtable samtidigt
med at en anden tråd henter ud så vil put og get blive synkroniseret, så
resulatet er konsistent.

Men flere tråde kan godt hente en reference til den samme Vector ud af
Hashmap'en og arbejde på den.

Vector er ligesom Hastable synchronized d.v.s. at flere add's/get's vil
også være konsistente.
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