Hola.
Te explico un poquillo para que es útil es singleton:
En Singleton efectivamente no es más que úna clase estática que solo se puede instanciar una vez, además los datos que tu incluyas en el singleton son permanentes y no desaparecen (hasta que sales del programa, el recolector de basura destruye la clase o hasta q apagas el ordenador claro). Por ejemplo esto es útil a la hora de compartir diferentes variables u objetos entre paquetes, por ejemplo para ir guardando los datos introducidos en un formulario y luego procesarlos en un paquete o clase diferente. Lo que no es útil es para mantener un histórico de objetos. Para esta tarea a mi entender deberías usar un vector de objetos, con tipo, acción realizada etc. donde guardar el histórico. Además si luego pretendes guardar este histórico en el disco duro a la hora de guardarlo sera muy facil serializar el vector a un archivo. Lo que puedes hacer es un Singleton con un vector dentro, pero esta solución a mi entender no es muy elegante.
No entiendo lo de si dos presonas pueden modificarlo a la vez, si te refieres a dos clases no, osea tu imagínate que instancias el Singleton metes en un formulario el nombre de la persona 1, 2,....,n y ahora hay otra clase llamada ordenar_alfabeticamente, esta instanciará al mismo singleton y podrá coger los datos para ordenarlos alfabeticamente.
Ahora si lo que quieres es que dos personas tengan acceso concurrente (a la vez) a un sistema de ficheros o a un histórico lo mejor es usar una base de datos, ya que sino vas a tener problemas de interbloqueo, eficiencia etc.
La verdad es que yo no soy experto en el tema, pero bueno, si he ayudado en algo me alegro.
SALUDOS FOREROS.