l'exécution du bloc de code atomiquement
Comment voulez-vous répondre à la question suivante?
Une méthode d'une classe java contient un bloc de code qui doit être
exécuté de manière atomique. Expliquer, à l'aide de pseudo-code, comment vous
permettrait de s'assurer que ce bloc de code est exécuté automatiquement
Aurais-je atteindre cet objectif en faisant la méthode ..
public final AtomicInteger x = new AtomicInteger(0);
d'assurer l'instruction get retourné:
x.get()
et si je le voulais pour incrémenter la valeur de x puis-je faire?
x.getAndIncrement();
- Atomiquement à l'égard de quoi?
- désolé, je ne suis pas sûr, c'est tout ce que nous avons pour la question. il est passé à l'examen de la question et nous n'avons pas été donné l'exemple de réponses
- Cette question est beaucoup trop vague pour être répondu.
- Lire sur les verrous, sémaphores, et de synchronisation pour vous obtenir a commencé. Aussi, apprendre ce blocage est.
- C'est la question/titre censé être automatiquement ou automatiquement corriger?
- À la lecture de la question, pourquoi pensez-vous qu'il serait automatiquement?
- Parce que je n'ai jamais entendu parler de "atmoically" dans la programmation, et parfois les gens ne l'épeler correctement.
- Jetez un oeil à ACIDE transactions, puis suivre le lien pour l'Atomicité.
Vous devez vous connecter pour publier un commentaire.
La réponse dépend de votre définition de "atomique"
Je sais de trois valide définitions pour
atomic
:Le premier est probablement ce que votre professeur voulait dire, et il est assez facile à réaliser (voir ci-dessous).
La deuxième atomiques (comme dans l'ACIDE) peut être approximée. Voir ci-dessous.
Le troisième tout simplement ne peut pas être garantie en Java il ne fournit pas l'accès à la "sections critiques" primitives nécessaires pour uninterruptibility. Heureusement, le besoin est assez bien limitées aux systèmes d'exploitation et les pilotes de périphérique.
Atomique comme dans synchronisé
C'est relativement simple: il suffit de joindre votre bloc de code dans un bloc synchronisé. J'ai montré comme un discret bloc ci-dessous, mais il y a d'autres options:
Atomique comme dans l'ACIDE
Il n'y a pas de cas solution pour
ACID
atomicité, mais il peut être approchée à l'aide d'synchronisé code. Pour ce faire, chacune des parties de l'action doivent être rangés de manière réversible.C'est de cette façon que j'avais en approche:
Pour les besoins de la discussion, supposons qu'il y a un multipart action que vous devez faire sur un objet que nous appellerons
exampleObj
, que vous avez trois actions à effectuer, ce qui peut être en toute sécurité inversée, et que tous les accès àexample
est synchronisé surexampleLock
.Je crois que la réponse attendue était quelque chose comme ceci:
L'exécution de
doSomething()
n'est pas vraiment atomique (Avertissement: il est très différent de l'atomicité), mais le synchronisé mot-clé garantit que seul un thread peut entrer dans l'exécution de cette méthode (sur une instance deA
). Je pense que c'est ce qu'ils voulaient dire à la place de l'atomicité.Ici est une autre question à propos de l'atomicité en Java. Vous pouvez trouver quelque chose d'utile là-bas.
synchronized
méthode ne garantit en aucune manière l'atomicité.AtomicInteger
ou quoi que ce soit.