6
votes

Quelle est la déclaration synchronisée utilisée?

Quelle est l'utilisation des déclarations synchronisées


5 commentaires

Voulez-vous la syntaxe ou voulez-vous savoir pourquoi et quand l'utiliser?


Stackoverflow.com/users/124339/johana Qu'est-ce qui se passe avec toutes les questions "Quelles sont."


-1 Vous continuez à poser des questions qui répondent facilement dans tous les tutoriels et ont même réussi à acquérir une réputation considérable avec elle. Je pense que ce n'est pas honnête.


@Tkopec: En réalité, il est encouragé par la FAQ de ce site et si les questions sont uniques et aboutissent à de bonnes informations dans la présente, ils bénéficient du site, ce qui est la raison pour laquelle des questions ont une réputation qui leur est une réputation. Cette information est tout dans la FAQ.


@Software singe - comme vous regardez son profil, vous remarquerez qu'elle est récemment plutôt découragée: Stackoverflow.com/questions/1035151/... Stackoverflow.com/Questtions/1035134/... Stackoverflow.com/Questtions/1264706/... et le sujet est controversé meta.stackexchange.com/questions/1326/...


5 Réponses :


2
votes

Un seul fil à la fois peut accéder à un bloc synchronisé.

Ceci est une construction de langue de base. Si vous n'êtes pas du tout familier avec cela, vous devrez examiner.


0 commentaires

7
votes

C'est un Java construit sous forme d'exclusion mutuelle. Ceci est utilisé pour des applications multithreadées.

Tutoriel Sun Concurrence

Ceci a une section sur synchronisée, mais vous devez lire le tout si vous essayez d'utiliser des applications multithreadées.

wiki mutex


0 commentaires

13
votes

Ceux-ci sont utilisés lorsque vous construisez un programme avec de nombreux "threads". Lorsque le démarrage principal, il commence par un fil, qui exécute les étapes d'une séquence. Vous pouvez commencer beaucoup plus de threads, qui peuvent ensuite exécuter du code en même temps. Si vous exécutez le même code en même temps, les choses pourraient se comporter de manière à ne pas vouloir:

synchronized (y) {
    y = x+20;
    int b = y+10;
} // lock gets released here


0 commentaires

4
votes

Il crée une section de code qui, en ce qui concerne deux filets ou plus, peut (a) seulement être exécuté par un fil à la fois, et (b) forme une barrière de mémoire . < / p>

Tout en comprenant le concept d'exclusion mutuelle empêchant une exécution simultanée du code est assez facile, il est tout aussi important de la barrière mémoire.

Une barrière de mémoire forme un "arrive avant" relation entre deux threads. Toute modification de la mémoire effectuée par un fil avant d'acquérir une serrure est garantie par un autre thread après qu'il acquiert le même verrou. En raison des effets des caches de la CPU et de leur interaction avec la mémoire principale, il est essentiel de prévenir l'observation et la mise à jour de la mémoire mise en cachette et la prévention des conditions de course entre les threads.


1 commentaires

+1 L'importance de la visibilité à d'autres threads est souvent négligée



1
votes

Invoquant une méthode d'instance synchronisée d'un objet acquiert une serrure sur l'objet et appeler une méthode statique synchronisée d'une classe acquiert une serrure sur la classe. Une instruction synchronisée peut être utilisée pour acquérir un verrou sur n'importe quel objet, pas seulement cet objet, lors de l'exécution d'un bloc du code dans une méthode. Ce bloc est appelé bloc synchronisé. La forme générale d'une déclaration synchronisée est la suivante: synchronisé (expr) { déclarations; } L'expression Expr doit évaluer à une référence d'objet. Si l'objet est déjà verrouillé par un autre fil, le thread est bloqué jusqu'à ce que le verrou soit libéré. Lorsqu'un verrou est obtenu sur l'objet, les instructions du bloc synchronisé sont exécutées, puis le verrou est libéré.


0 commentaires