Let me explain your questions with examples.
#1 Define a class
int val = 0;
// getValStatic is not correct. it is shown for explanation only
public static int getValStatic()
public static int getValInstance()
#2 instantiate 2 objects
X x1 = new X();
x1.val = 2;
X x2 = new X();
#3 Suppose static method could access instance variables. In that case if you call X.getValStatic(), it will not be clear which object's val is needed, x1 or x2. This is the reason static method is not allowed to access non static methods/variables.
# 4 As for Synchronization I guess the answer is just alowing one thread to access the method/variable ata time.