webForumDet fria alternativet

synchronized

Java

2 svar · 239 visningar · startad av Sang-drax

Medlem sedan juli 2002581 inlägg
Frågan#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?

Medlem 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

Medlem 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.

256 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)