Oi Rodney, pode contar um pouco mais de que tipo de instância vc ta falando? Se não for uma instância que aponta para um recurso externo, minha sugestão é não usar o singleton. Cada vez que alguém chamar o método, retorne uma cópia da original :). A JVM sabe lidar com objetos de vida curta e isso tende a não ser problema para vc.
Caso queira realmente ter um singleton, mas o seu objeto é apenas de leitura, não tem problema também o acesso simultaneo...
Caso ele tenha alteração e vc optou por não usar imutabilidade, você pode marcar ele como sincronizado.. Se vc não tem uma relação entre dois objetos sincronizados, não vai cair em deadlock.
Por fim, caso precise de uma estratégia super avançada de lock, vc pode olhar as implementações da interface java.util.concurrent.Lock, que possibilita mais possibilidades de locks em relação a que vc tem com o synchronized.