Quelle est la différence entre Lock et Synchronized en Java
1. D'un point de vue fonctionnel
Lock
et Synchronized
sont deux outils en Java utilisés pour résoudre les problèmes de sécurité des threadsLock
和Synchronized
都是java中去用来解决线程安全问题的一个工具
2. 从特性来看
Synchronized
是java中的同步关键字,Lock是J.U.C包中提供的接口,而这个接口有很多的实现类,包括ReentrantLock这样重入锁的实现,Synchronized可以通过两种方式去控制锁的力度
一种把synchronized
关键字修饰在方法层面,另一种是修饰在代码块上,可以通过synchronized
加锁对象的生命周期,来控制锁的作用范围,锁对象是静态对象或者是类对象,那么这个锁就是属于全局锁,如果锁对象是普通实例对象,那么这个锁的范围取决于这个实例的生命周期,Lock中锁的粒度是通过它里面提供的lock()方法和unlock()
方法来决定的
如上图:在lock()方法和unlock()
方法之间的代码,是能够保证线程安全的,而锁的作用域 取决于Lock实例的生命周期。Lock比Synchronized
的灵活性更高,Lock可以自主的去决定什么时候加锁,什么时候释放锁,只需要调用lock()和unlock这两个方法就可以了,Lock还提供了非阻塞的竞争锁的方法,叫tryLock()
,这个方法可以通过返回true/false来告诉当前线程是否已经有其他线程正在使用锁,而Synchronized由于是关键字,所以它无法去实现非阻塞竞争锁的方法,Synchroized
锁的释放是被动的,当Synchronized同步代码块,执行结束以后,或者代码出现异常的时候才会被释放,Lock提供了公平锁和非公平锁的机制,公平锁是指线程竞争锁资源的时候,已经有其它线程正在排队,或者等待锁释放,那么当前竞争锁的线程,是无法去插队的,非公平锁就是不管是否有线程在排队等待锁,它都会去尝试去竞争一次锁,Synchronized只提供方了一种非公平锁的实现。
3. 从性能方面来看
Synchronized
和lock在性能方面相差不大,在实现上会有一定的区别,Synchronized
. Synchronized
est le mot-clé de synchronisation en Java, Lock est l'interface fournie dans le package J.U.C, et cette interface a de nombreuses classes d'implémentation, y compris l'implémentation de verrous réentrants tels que ReentrantLock. Synchronized peut être utilisé de deux manières pour contrôler le. force du verrou🎜🎜
synchronisé
La décoration des mots clés se fait au niveau de la méthode. L'autre consiste à la modifier sur le bloc de code. Vous pouvez contrôler la portée du verrou tout au long du cycle de vie de l'objet verrou via synchronisé
. objet statique ou un objet de classe, alors le verrou est un verrou global. Si l'objet verrou est un objet d'instance normal, alors la portée du verrou dépend du cycle de vie de l'instance. la méthode lock() et le fourni. Déterminé par la méthode unlock()
🎜🎜
unlock()
peut garantir la sécurité des threads et la portée de le verrou dépend du cycle de vie de l’instance Lock. Lock est plus flexible que Synchronized
. Lock peut décider indépendamment quand verrouiller et quand libérer le verrou. Il vous suffit d'appeler les méthodes lock() et unlock. Fournit également une compétition de verrouillage non bloquante. méthode appelée tryLock()
. Cette méthode peut indiquer au thread actuel si d'autres threads utilisent déjà le verrou en renvoyant vrai/false. Puisque Synchronized est un mot-clé, il ne peut donc pas implémenter de compétition non bloquante. méthode de verrouillage.La libération du verrouillage Synchronisé
est passive. Elle ne sera libérée qu'après la fin de l'exécution du bloc de code synchronisé ou lorsqu'une exception se produit dans le code. Le verrouillage fournit Comprendre le mécanisme du verrouillage équitable et. Un verrouillage injuste signifie que lorsque les threads sont en compétition pour les ressources de verrouillage, d'autres threads sont déjà en file d'attente ou attendent que le verrou soit libéré. Ensuite, le thread actuellement en compétition pour le verrou ne peut pas sauter dans la file d'attente. un thread en attente d'un verrou dans la file d'attente, il tentera de rivaliser pour un verrou. Synchronisé ne fournit qu'une implémentation de verrous injustes. 🎜🎜3. Du point de vue des performances🎜🎜Synchronisé
et le verrouillage sont similaires en termes de performances, mais il y aura certaines différences dans la mise en œuvre de Synchronisé
pour introduire des verrous légers. , des verrous lourds et des mécanismes de mise à niveau des verrous sont utilisés pour optimiser les verrous, tandis que Lock utilise des verrous rotatifs pour optimiser les performances🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4
