07. april 2004 - 14:46Der 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);
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
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?
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.
Synes godt om
Ny brugerNybegynder
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.