La diferencia entre sincronización y bloqueo
La diferencia entre sincronizado y bloqueado:
1. En primer lugar, sincronizado es una palabra clave incorporada en Java. A nivel de jvm, Lock es una clase de Java.
2. Sincronizado no puede decidir si adquirir el estado de bloqueo, pero Lock puede decidir si adquirir el estado de bloqueo.
3. Sincronizado liberará automáticamente el bloqueo (un hilo liberará el bloqueo al ejecutar código sincronizado; el hilo b liberará el bloqueo cuando ocurra una excepción durante la ejecución), el bloqueo debe liberarse manualmente cuando finalmente ( unlock() Método para liberar el bloqueo); de lo contrario, es fácil provocar un punto muerto en el hilo.
4. Dos subprocesos 1 y 2 con la palabra clave de sincronización. Si el subproceso actual 1 obtiene el bloqueo, el subproceso 2 esperará. Si el subproceso 1 está bloqueando, el subproceso 2 seguirá esperando, mientras que el bloqueo no necesariamente esperará. Si intenta adquirir el bloqueo, el subproceso puede finalizar sin esperar.
5. Los bloqueos de sincronización son reentrantes, ininterrumpibles e injustos, mientras que los bloqueos son reentrantes, sensatos y justos (ambos).
6. Los bloqueos de bloqueo son adecuados para problemas de sincronización con una gran cantidad de código sincronizado, y los bloqueos de sincronización son adecuados para problemas de sincronización con una pequeña cantidad de código.
Comparación de rendimiento:
No hay mucha diferencia en el rendimiento entre sincronización y bloqueo. Hay algunas diferencias en la implementación.
synchronized utiliza un mecanismo de bloqueo pesimista, mientras que sincronizado es administrado por la JVM. Después de JDK1.6, se utilizan para la optimización bloqueos sesgados, bloqueos ligeros, bloqueos pesados y promociones de bloqueo.
Y Lock utiliza un mecanismo de bloqueo optimista. El código que controla el candado se puede personalizar y optimizar mediante candados giratorios CAS.