Heim  >  Artikel  >  Java  >  Was ist der Unterschied zwischen Lock und Synchronized in Java?

Was ist der Unterschied zwischen Lock und Synchronized in Java?

WBOY
WBOYnach vorne
2023-04-17 19:19:051235Durchsuche

1. Aus funktionaler Sicht

Lock und Synchronized sind beides Tools, die in Java zur Lösung von Thread-Sicherheitsproblemen #🎜 verwendet werden 🎜#LockSynchronized都是java中去用来解决线程安全问题的一个工具

2. 从特性来看

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

Was ist der Unterschied zwischen Lock und Synchronized in Java?

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

Was ist der Unterschied zwischen Lock und Synchronized in Java?

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

3. 从性能方面来看

Synchronized和lock在性能方面相差不大,在实现上会有一定的区别,Synchronized2. Aus Sicht der Funktionen

#🎜🎜#Synchronized ist das Synchronisationsschlüsselwort in Java, Lock ist die im J.U.C-Paket bereitgestellte Schnittstelle und diese Schnittstelle Dort Es gibt viele Implementierungsklassen, einschließlich der Implementierung von Wiedereintrittssperren wie ReentrantLock. Synchronized kann die Stärke der Sperre auf zwei Arten steuern #🎜🎜##🎜🎜#Was ist der Unterschied zwischen Lock und Synchronized in Java?#🎜🎜##🎜🎜# Eine besteht darin, das Schlüsselwort synchronized auf Methodenebene zu ändern, und die andere darin, es weiter zu ändern Mit dem Codeblock können Sie den Umfang der Sperre über den Lebenszyklus des synchronisierten gesperrten Objekts steuern. Wenn das Sperrobjekt ein statisches Objekt oder ein Klassenobjekt ist, handelt es sich bei der Sperre um eine globale Sperre. Wenn das Sperrobjekt ein gewöhnliches Instanzobjekt ist, hängt der Umfang dieser Sperre vom Lebenszyklus dieser Instanz ab. Die Granularität der Sperre in Lock wird durch die Methode lock() und unlock()bestimmt > darin bereitgestellte Methode#🎜🎜##🎜 🎜#Was ist der Unterschied zwischen Lock und Synchronized in Java?#🎜🎜##🎜 🎜#Wie oben gezeigt:Der Code zwischen der lock()-Methode und der unlock()-Methode kann Thread-Sicherheit gewährleisten, und der Umfang der Sperre hängt vom Lebenszyklus ab der Lock-Instanz. Lock ist flexibler als Synchronized. Lock kann unabhängig entscheiden, wann die Sperre gesperrt und wann freigegeben werden soll. Lock bietet auch einen nicht blockierenden Sperrenwettbewerb Methode namens tryLock() Diese Methode kann dem aktuellen Thread mitteilen, ob andere Threads die Sperre bereits verwenden, indem sie true/false zurückgibt. Da Synchronized ein Schlüsselwort ist, kann sie keinen nicht blockierenden Wettbewerb implementieren Die Lock-Methode ist passiv. Sie wird erst freigegeben, wenn die Ausführung des synchronisierten Codeblocks abgeschlossen ist oder wenn eine Ausnahme im Code auftritt und unfaire Sperre bedeutet, dass, wenn Threads um Sperrressourcen konkurrieren, andere Threads bereits in der Warteschlange stehen oder auf die Freigabe der Sperre warten. Dann kann der Thread, der derzeit um die Sperre konkurriert, nicht in die Warteschlange springen Wartet ein Thread in der Warteschlange auf eine Sperre, wird er versuchen, um eine Sperre zu konkurrieren. Synchronized bietet nur eine Implementierung unfairer Sperren. #🎜🎜##🎜🎜#3. Aus Leistungssicht sind #🎜🎜##🎜🎜#Synchronized hinsichtlich der Leistung ähnlich, es wird jedoch gewisse Unterschiede in der Implementierung geben.Synchronized führt voreingenommene Sperren, leichte Sperren, schwere Sperren und Sperren-Upgrade-Mechanismen ein, um eine Sperrenoptimierung zu erreichen, während Lock Spin-Sperren verwendet, um eine Leistungsoptimierung zu erreichen#🎜🎜#

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Lock und Synchronized in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen