2010-01-26 11 views
0

J'utilise toplink, mais je rencontre un problème lors de la mise à jour des valeurs. c'est mon extrait de codeen utilisant l'instruction de mise à jour dans toplink dans un environnement multithread

ExpressionBuilder builder = new ExpressionBuilder(); 
Expression expr = builder.get("addressId").equal("2"); 
Address address1 = (Address)uow.readObject(Address.class, expr); 
address1.setPincode(address1.getPincode() + 1); 
uow.registerObject(address1); 
uow.writeChanges(); 

comme mon cas d'utilisation est que j'exécuter le même code dans un environnement multithread pour dire 10 fils de discussion, donc après l'exécution que je devrais obtenir 10 comme valeur pour pincode dans DB si la valeur initiale était 0. mais quand j'exécute le code je ne reçois pas les bonnes valeurs. quelqu'un peut m'aider s'il vous plaît

Répondre

0

Il semble que vous ayez une condition de course ici. La séquence d'opérations commençant par l'objet lu à travers les changements d'écriture doit être traitée comme atomique, ce qui signifie qu'aucun thread ne peut être autorisé à lire si un autre thread n'a pas terminé sa partie.

Je ne vois aucun code de synchronisation pour cela. Sans un tel code au lieu de 10, vous recevrez au hasard n'importe quel nombre de 1 à 10