Oui, c'est ce qui se passe. Même si, par un certain caprice de la nature, vos threads devaient démarrer exactement au même moment, ils seraient rapidement hors de la ligne simplement à cause des conflits de ressources entre eux (au minimum, accès à la table DB ou au serveur SGBD). S'ils restent la plupart du temps en phase (c'est-à-dire, ne dépassant jamais quelques millisecondes), choisissez simplement une "résolution" différente pour votre champ CreatedDateTime. Mettez-le dans le 10 le plus proche d'une seconde (ou deuxième) plutôt que milliseconde. Ou utilisez des valeurs fixes d'une autre manière. Sinon, il suffit de se rendre compte que c'est un comportement parfaitement normal. Et comme l'a souligné BC dans un commentaire, vous pouvez mal comprendre l'utilisation du mot «synchronized». Il est utilisé (en Java, j'espère que C# est similaire) pour s'assurer que deux threads n'accèdent pas à la même ressource en même temps. En réalité, cela garantit presque que les discussions ne resteront pas synchronisées comme vous le comprenez (personnellement je pense que votre définition est juste en termes d'usage en anglais (les choses se passent en même temps) mais certains langages informatiques ont suborné la définition de leurs propres buts). Si vous testez ce qui se passe lorsque des horodatages spécifiques entrent dans la base de données, vous ne pouvez pas compter sur les threads qui se comportent d'eux-mêmes en étant planifiés dans un ordre spécifique et à des moments spécifiques. Vous avez vraiment besoin de simuler les données d'une façon ou d'une autre, sinon c'est comme essayer de coller de la gelée à un arbre (ou d'entraîner un chat).
Une solution consiste à ne pas utiliser des éléments tels que getCurrentTime()
ou now()
mais utiliser un ensemble spécifique d'insertions ayant des horodatages connus. En fonction de votre architecture actuelle, cela peut être difficile (par exemple, si vous appelez simplement une API qui elle-même obtient l'horodatage actuel à la résolution d'une milliseconde).
Si vous contrôlez le code SQL réel qui remplit la colonne timestamp, vous devez modifier cela pour utiliser des valeurs précalculées plutôt que le now()
ou ses équivalents.
Cela va à l'encontre de l'idée d'avoir un ordonnanceur de threads ... – GEOCHET
Je pense que vous ne comprenez pas le terme synchronisé. –
Je pense que l'OP veut générer un horodatage qui peut être partagé entre plusieurs threads? @Click OK: Peut-être que vous devriez reformuler votre question, et donner un exemple de ce que vous voulez avoir. –