Comment puis-je empêcher l'accès simultané. J'ai un code comme celui-ci et je reçois une sortie comme celle-ci p> tout conseil? P> p> p>
6 Réponses :
Vous avez quatre objets MC distincts. Exécution typique d'une méthode em> instance em> sur ceux ( On dirait que vous voulez que cette dernière approche, mais cela ne sonne pas comme un excellent design pour moi. Si vous voulez vraiment en mettre la mise en œuvre de cette façon, vous utiliseriez: p> maintenir Sync code>), ils ne doivent pas interférer les uns avec les autres. Vous pouvez utiliser un bloc code> synchronisé code> pour vous assurer qu'un seul tour à la fois, mais vous devez considérer quoi synchroniser:
ce code>, que je vous découragerais de faire. (Tout autre code pourrait se synchroniser sur le même objet.) Li>
synchroniser code> comme méthode synchronisée mais la rendant statique aussi em> travail, mais vous feriez encore une fois vous verrez un objet visible publiquement ( mc.c.class code>) que je décourage généralement. p> p>
bâillement - voir ma réponse: juste faire la méthode statique
@Bohemian: Comme je le dis spécifiquement à la fin de ma réponse, que serait i> travailler, mais cela signifie verrouiller sur un objet publiquement visible. Pas une bonne idée, IMO - J'aime pouvoir raisonner de mon code, sachant que rien d'autre ne peut se bloquer sur les mêmes objets.
@Jon_skeet: assez juste, mais franchement, la classe entière est "moins que bien conçue" et uniquement à des fins de démonstration, cette solution rapide a donc répondu à sa question "WTF se déroule".
@Bohemian: Vous pouvez choisir de donner une solution rapide si vous le souhaitez, mais je voudrais plutôt remettre en question la conception et mentionnez les meilleures pratiques en même temps. Je pense que l'OP en apprendra plus de cette façon, même si vous bâchez simplement ...
Il suffit de faire: synchronisé (mc.class) {
@iimuhin: Eh bien que travaille i>, mais cela signifie que vous utilisez un verrou qui peut être synchronisé ailleurs aussi. Je préfère ne jamais synchroniser sur ce code> ou d'autres références visibles de manière externe.
Vous êtes instanciant quatre objets et sychronisé code> est sur un moniteur différent. Soit faire sync code> statique de sorte que la classe actuelle soit le moniteur, ou lorsque vous instaniez, transmettez le même objet de moniteur aux quatre, puis synchronisez-le P>
Faites de votre méthode statique:
private static synchronized void sync();
Utilisez une serrure statique Synchronisez votre méthode. Les classes de verrouillage sont à l'intérieur du package Java.ConCurrent P>
Pour la fonctionnalité souhaitée, vous pouvez faire la fonction de synchronisation statique. Je ne parle pas de la bonté du design. Cela fait simplement la façon dont vous aimez!
private static synchronized void sync()
salut u crée de nouvelles instances de votre classe MC, méthode synchronisée garantit un accès unique pour une instance s'il ne s'agit pas de méthode statique.
Je suggérerais que vous avez une variable statique privée dise verrouillage entier, puis synchronisez-le dessus : P>
Synchronisation vido privée () { p>
synchronisé (verrouillage)
{ p> } p> } p> p>
Quelle serait la sortie souhaitée?
Qu'essayez-vous d'atteindre?