No, there wont be an implicit synchronisation. Synchronized works within a block or function scope. Anything outside a synchronized block is not synchronized.
The following example code shows that. If the methods where synchronized it would always print 0.
class example extends Thread{
//Global value updated by the example threads
public static volatile int value= 0;
public void run(){
while(true)//run forever
unsynchMethod();
}
public void unsynchMethod(){
synchronizedMethod();
//Count value up and then back down to 0
for(int i =0; i < 20000;++i)
value++;//reads increments and updates value (3 steps)
for(int i = 0; i < 20000;++i)
value--;//reads decrements and updates value (3 steps)
//Print value
System.out.println(value);
}
//Classlevel synchronized function
public static synchronized void synchronizedMethod(){
//not important
}
public static void main(String... args){
example a = new example();
example b = new example();
a.start();
b.start();
}
}
My Results, should have been 0 if synchronized:
4463
6539
-313
-2401
-3012
...