Java Singleton e Sincronização

Por favor, esclarecer minhas dúvidas sobre Singleton e Multithreading:

Qual é a melhor maneira de implementar o Singleton em Java, em um ambiente multithread?O que acontece quando vários segmentos tentam acessargetInstance() método ao mesmo tempo?Podemos fazer singletongetInstance() synchronized?A sincronização é realmente necessária ao usar classes Singleton?