2011-11-20, 12:47
  #1
Medlem
Till att brja med, en doget method spawnas ut i en egen trd... men delar den metoder frn servleten med andra trdar?

Vad r det fr skillnad p static och private nr bda delas av samtliga trdar i serlveten? Delas de vriga metoderna p samma stt i mainservlet?
Citera
2011-11-20, 14:24
  #2
Moderator
Protons avatar
Citat:
Ursprungligen postat av searchsian
Till att brja med, en doget method spawnas ut i en egen trd... men delar den metoder frn servleten med andra trdar?

Vad r det fr skillnad p static och private nr bda delas av samtliga trdar i serlveten? Delas de vriga metoderna p samma stt i mainservlet?
Frstr inte riktigt vad du menar, men en servlet startar ju en egen trd per anrop som du redan sagt.

Ett typexempel p nr man kan rka ut fr diverse lustiga effekter r om man skulle vilja gra en "trffrknare" med en servlet. D skulle du bli tvungen att dels ha en variabel som delas mellan alla trdar som sedan stegar upp ett fr varje gng servleten anropas, right?

Denna variabel kommer vara private, eftersom det endast r den aktuella servleten som borde kunna ndra i den, den br ju ven vara deklarerad static eftersom det inte finns nn mening med att ha flera instanser av denna variabel i olika servlets.

Det lustiga kommer d nr man ska uppdatera denna variabel. P en vlbeskt sida skulle det ju kunna hnda att tv anrop kommer in exakt samtidigt, varp trdarna kommer att frska ndra i variabeln samtidigt. Det blir ju inget bra, fr vad r det som sger att den ena trden har mer rtt n den andra i detta fall? Hade det varit en delad databaskoppling hade man i vrsta fall tappat data, eftesom den ena tden kommer skriva data som inte finns i andra trden och nr den andra trden skriver till databasen kommer den ju skriva "gammal data" d.

Lsningen kommer i form av nyckelordet "synchronized" som man kan stta p antingen en variabel, en metod eller ett kodblock som anger att endast entrd i taget kan anvnda det aktuella kodblocket eller vad det nu r, de andra trdarna fr vnta tills den aktuella trden r klar med det synkroniserade kodstycket. Ett exklusivt "ls skulle man kunna kalla det.

Blev du klokare av det hr?
Citera
2011-11-20, 18:15
  #3
Medlem
proton, jag frstr exakt, lt mig frklar mig tydligare...

i en servlet..

Stter jag

private String login;
private String password;


S kommer varenda trd som spawnar loss i en egen doget metod kunna uppdatera dessa, huller om buller... . Det skulle sabotera login/password, anvndare a, skulle kunna f anvndarens b lsenord etc...
Dock tillhr variablerna objektet Servlet och inte Klassen servlet...


Om jag skriver s hr istllet


private static String login;
private static String password;

S kommer jag f exakt samma effekt. Fast nu tillhr variablerna klassen istllet.

S vad r det fr pong att dela upp static vs non static i en servlet som det bara finns en av i alla fall?


Den viktigaste frgan..., hur fungerar det med metoder i servleten? r det som annars, det finns bara ett object Servlet, drfr delas alla metoder i servleten av alla trdar som spawnas? Dvs, det r s lngt ifrn trdskert man kan komma?

Man vill inte helst stta synchronized p metoder i servleten? D r det vl egentligen bst, att skapa nya objekt direkt doget metoden och lta varje trd g i andra objeckt som inte berr servleten fr att p s stt uppn en trdsker applikation?

Har jag rtt i mina funderingar?
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in