La diferencia entre csdn sincronizado y bloqueado
En general, el bloqueo es más flexible.
Principales similitudes: Lock puede completar todas las funciones implementadas por sincronizado
Diferencias:
1. ReentrantLock es más completo en términos de funcionalidad, como el tiempo de espera de bloqueo. Puede interrumpir la espera de bloqueo, la votación de bloqueo, etc., por lo que es más escalable. En lugares con múltiples variables de condición y bloqueos altamente competitivos, ReentrantLock es más adecuado. ReentrantLock también proporciona Condición, que es más flexible para las operaciones de espera y activación de subprocesos. Un ReentrantLock puede tener múltiples instancias de Condición, por lo que es más escalable.
2. ReentrantLock debe liberar el bloqueo finalmente; de lo contrario, las consecuencias serán graves. Desde la perspectiva de la codificación, usar sincronizado es más simple y es menos probable que se pierda o se realice.
3.El rendimiento de ReentrantLock es mejor que el de sincronizado.
4. ReentrantLock proporciona una solicitud de bloqueo sondeable. Puede intentar obtener el bloqueo. Si tiene éxito, continuará procesando. Si falla, puede esperar a la siguiente ejecución. Fácil ocurre un punto muerto y la sincronización se realizará correctamente una vez que se ingrese la solicitud de bloqueo o siempre estará bloqueada, por lo que es más probable que cause un punto muerto.
Reimpresión:
1. ReentrantLock tiene la misma concurrencia y semántica de memoria que Synchronized, además de votación de bloqueo, espera de bloqueo cronometrada e interrupción de espera de bloqueo.
Subprocesos Tanto A como B necesitan adquirir el bloqueo en el objeto O. Supongamos que A adquiere el bloqueo en el objeto O. B esperará a que A libere el bloqueo en O.
Si se utiliza sincronizado, si A lo hace no se libera, B esperará para siempre y no podrá ser interrumpido
Si se usa ReentrantLock, si A no se libera, B puede interrumpir la espera y hacer otras cosas después de esperar un tiempo suficiente. p>
Bloqueo de adquisición de ReentrantLock y tres métodos:
a) lock(), si se adquiere el bloqueo, regresa inmediatamente. Si otros subprocesos mantienen el bloqueo, el subproceso actual permanecerá inactivo hasta que se complete el proceso. se adquiere el bloqueo
b) tryLock(), si se adquiere el bloqueo, devolverá verdadero inmediatamente. Si otro hilo mantiene el bloqueo, devolverá falso inmediatamente
c. ) tryLock (tiempo de espera prolongado, unidad TimeUnit), si se adquiere El bloqueo devuelve verdadero inmediatamente. Si otro subproceso mantiene el bloqueo, esperará el tiempo indicado por el parámetro Durante el proceso de espera, si se adquiere el bloqueo. devolverá verdadero si se agota el tiempo de espera, devolverá falso;
d) bloquear de forma interrumpible: si se adquiere el bloqueo, regresa inmediatamente. Si no se adquiere el bloqueo, el hilo actual está en un. estado inactivo hasta que se bloquea o el hilo actual es interrumpido por otro hilo.
2. Sincronizado está en el nivel JVM No solo se puede monitorear el bloqueo sincronizado a través de algunas herramientas de monitoreo, sino también cuando ocurre una excepción. durante la ejecución del código, la JVM liberará automáticamente el bloqueo. Sin embargo, esto no es posible con Lock. Lock se implementa mediante código. Para garantizar que el bloqueo se libere, solo se debe colocar UnLock() en finalmente{}
3. Cuando la competencia por recursos no es muy feroz, el rendimiento de Synchronized es mejor que el de ReetrantLock, pero cuando la competencia por recursos es muy feroz, el rendimiento de Synchronized es mejor que el de ReetrantLock. El rendimiento disminuirá docenas de veces, pero el rendimiento de ReetrantLock puede hacerlo. permanecer normal;