webForumDet fria alternativet

synchronized

2 svar · 239 visningar · startad av Sang-drax

Sang-draxMedlem sedan juli 2002581 inlägg
#1

Antag att jag har denna kod:

interface I
{
   void a();
}

class C
   implements I
{
   synchronized void a()
   {
      //...
   }
}

Om jag nu anropar a genom interfacet:

I var = ...
var.a();

Kommer a då att vara synchronized?

ViktorMedlem sedan aug. 20021 752 inlägg
#2

Antagligen inte det svar som du vill ha men du får det eftersom du inte fått något annat ;)

Det skulle verkligen förvåna mig om den inte är synchronized när du skriver så. Ditt interface påvärkar ju inte (så vitt jag vet) själva programmet utan är bara en mall för hur programmet ska se ut.

Du kan alltid göra ett litet test program där du startar 2 trådar som anroppar samma instans av klassen hela tiden. Använd System.out.println(), om medelandena blir fina så är det synchronizerat, annars inte :)

/Viktor

spangoMedlem sedan juni 20008 205 inlägg
#3

Den blir synkroniserad, eftersom det är så du implementerar metoden. Det är egentligen inte mer vettigt att den skulle bli osynkroniserad än att hela programmet skulle krascha med ett MethodNotFoundException för att metoden inte har någon kropp i interfacedefinitionen.

120 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
118 ms — hämta tråd, inlägg och bilagor (db)