Maison  >  Article  >  Java  >  Quelle est la différence entre Lock et Synchronized en Java

Quelle est la différence entre Lock et Synchronized en Java

WBOY
WBOYavant
2023-04-17 19:19:051286parcourir

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 threadsLockSynchronized都是java中去用来解决线程安全问题的一个工具

2. 从特性来看

Synchronized是java中的同步关键字,Lock是J.U.C包中提供的接口,而这个接口有很多的实现类,包括ReentrantLock这样重入锁的实现,Synchronized可以通过两种方式去控制锁的力度

Quelle est la différence entre Lock et Synchronized en Java

 一种把synchronized关键字修饰在方法层面,另一种是修饰在代码块上,可以通过synchronized加锁对象的生命周期,来控制锁的作用范围,锁对象是静态对象或者是类对象,那么这个锁就是属于全局锁,如果锁对象是普通实例对象,那么这个锁的范围取决于这个实例的生命周期,Lock中锁的粒度是通过它里面提供的lock()方法和unlock()方法来决定的

Quelle est la différence entre Lock et Synchronized en Java

 如上图:在lock()方法和unlock()方法之间的代码,是能够保证线程安全的,而锁的作用域 取决于Lock实例的生命周期。Lock比Synchronized的灵活性更高,Lock可以自主的去决定什么时候加锁,什么时候释放锁,只需要调用lock()和unlock这两个方法就可以了,Lock还提供了非阻塞的竞争锁的方法,叫tryLock(),这个方法可以通过返回true/false来告诉当前线程是否已经有其他线程正在使用锁,而Synchronized由于是关键字,所以它无法去实现非阻塞竞争锁的方法,Synchroized锁的释放是被动的,当Synchronized同步代码块,执行结束以后,或者代码出现异常的时候才会被释放,Lock提供了公平锁和非公平锁的机制,公平锁是指线程竞争锁资源的时候,已经有其它线程正在排队,或者等待锁释放,那么当前竞争锁的线程,是无法去插队的,非公平锁就是不管是否有线程在排队等待锁,它都会去尝试去竞争一次锁,Synchronized只提供方了一种非公平锁的实现。

3. 从性能方面来看

Synchronized和lock在性能方面相差不大,在实现上会有一定的区别,Synchronized

2 Du point de vue des fonctionnalités🎜 🎜. 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🎜🎜Quelle est la différence entre Lock et Synchronized en Java🎜🎜 Une sorte de 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()🎜🎜Quelle est la différence entre Lock et Synchronized en Java🎜🎜 comme ci-dessus Figure :Le code entre la méthode lock() et la méthode 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer