Je suis confus au sujet de l'aide de la méthode statique en java Multithreading?
quelque chose à propos de statique:
- les instances de la classe action statique la méthode
les questions suivantes:
- Java: utilisation des méthodes statiques
- Que signifie le "statique" mot-clé le faire dans une classe?
Je suis confus au sujet de:
- méthode statique juste à seulement un bloc de mémoire?
- si j'utilise la méthode statique dans le multithreading, il va bloquer?
Expliquer un peu plus sur ce que tu veux dire par - si j'utilise la méthode statique dans le multithreading, il va bloquer? Aussi , passer par this dans un premier temps.
OriginalL'auteur freeeze king | 2016-12-10
Vous devez vous connecter pour publier un commentaire.
La
static
mot-clé dans Java signifie tout simplement "sans égard ou de la connaissance d'une instance d'un objet."Une méthode d'instance pouvez utiliser
this
pour accéder aux champs de ses associés, mais une méthode statique n'a pas d'instance associée et doncthis
n'a pas de sens.Dans le multithreading, le fil de sécurité consiste à protéger la cohérence et l'intégrité des données mutable. Parce que les objets encapsulent l'état de leurs champs d'instance, les méthodes d'instance seulement besoin d'être préoccupé par la sécurité des threads dans les circonstances dans lesquelles plusieurs threads accèdent à la même objet.
Donc, tandis que le fil de confinement d'un objet est valide fil de la politique de sécurité pour les instances d'une classe, ce même raisonnement n'est pas valide pour les méthodes statiques, car ils n'ont pas d'instance.
Cela n'a rien à voir avec les blocs de mémoire à tous. Il a juste à voir avec l'accès. Une instance d'objet est accessible par l'intermédiaire d'une référence. Si la référence est thread-clos, puis l'objet à qui que les points de référence sera toujours thread-safe. Mais n'importe quel thread n'importe où qui peut accéder à votre classe peut potentiellement obtenir pour ses membres statiques, car aucune référence à une instance est nécessaire pour les utiliser.
Méthodes statiques sont non-blocage par défaut. Vous pouvez implémenter votre propre synchronisation/fil de la politique de sécurité et avoir votre méthode statique bloc si vous le souhaitez.
OriginalL'auteur scottb
Pas, les méthodes n'ont pas de blocs de mémoire. Fils de l'exécution de ces méthodes. Chaque thread aura sa propre mémoire sur la pile où il stocke tous les arguments de la méthode et des variables.
Un thread ne peut pas accéder à la mémoire d'un autre thread, mais si il y a une ressource qui appartient à toutes les instances et est censé être accessible de manière séquentielle, alors vous pouvez synchroniser ou de verrouillage la méthode statique, ce qui en faisait un blocage. Sinon, pas de.
Je ne pense pas que c'est vrai. Les méthodes sont déjà une partie du programme compilé une image, et lorsque l'image est chargée dans la mémoire, il y a une seule copie partagée de code de la méthode. Ils ne sont pas affectés par rapport à la création de l'objet. Si vous connaissez pas, merci de partager la source/référence.
Oui et non. En général, un code est défini une fois dans la mémoire, cependant, chaque définition d'une méthode utilise un pointeur (et il crée une pile quand il est utilisé), et il utilise de la mémoire par exemple. Toutefois, et en fonction de la JVM, parfois c'est une sorte de magie. Pourtant, une méthode par exemple utilise de la mémoire.
Ouais, et tout ce que l'espace de pile pour les pointeurs de vous parler, c'est une partie du fil de la mémoire - qui est ce que j'ai dit dans ma réponse. Les invocations de méthode de ne pas créer une pile; ils créent un "stack frame" sur la pile du thread. En fin de compte, c'est le fil qui a besoin de cette mémoire, PAS de méthode eux-mêmes.
OriginalL'auteur YoungSpice
Chaque thread a son propre espace de pile, chaque fois qu'un thread appelle la méthode (statique ou virtuel) qui appellent alloue un bloc de pile, qui contient les variables locales. rien au sujet de ce qui est spécifique à des méthodes statiques.
Méthodes statiques peuvent être appelés simultanément par plusieurs threads, sauf si vous faites quelque chose pour contrecarrer cela, comme par exemple en exigeant que l'appelant acquérir un verrou (telles que l'utilisation du mot-clé synchronized).
Regarder des exemples de classes avec des méthodes statiques, comme java.lang.Les mathématiques. Ses méthodes sont apatrides donc aucun blocage n'est nécessaire. Les méthodes statiques sont bons pour les cas où il n'existe pas à l'état partagé. Ils peuvent être ok dans le cas de l'accès ou de modification des threads état partagé, selon le niveau de la concurrence est nécessaire et la façon efficace les threads choses qui sont accessibles. (Regarder dehors pour les goulets d'étranglement.)
De mettre le mot-clé synchronized sur une méthode statique peut être un problème tant que les limites de votre demande de l'appeler avec un seul thread à la fois. Autres stratégies, y compris à l'aide atomique des objets, en utilisant des threads structures de données conçu pour la haute simultanéité, ou à l'aide de fil de confinement peut être préférable de verrouillage.
Elles sont associées à la classe, ils ne peuvent pas accéder à une instance. Aussi impérieuses ne fonctionne pas.
OriginalL'auteur Nathan Hughes