La diferencia entre sincronizado y bloqueado
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 determinar si adquirir el estado de bloqueo, pero Lock puede determinar si adquirir el bloqueo.
3. Sincronizado liberará automáticamente el bloqueo (un hilo liberará el bloqueo después de ejecutar el código de sincronización; el hilo b liberará el bloqueo si ocurre una excepción durante la ejecución), el bloqueo debe liberarse manualmente finalmente. (Método de desbloqueo () Libere el bloqueo); de lo contrario, es fácil provocar un punto muerto en el hilo.
4. Usando la palabra clave sincronizada para dos subprocesos 1 y 2, si el subproceso actual 1 obtiene el bloqueo, el subproceso 2 esperará. Si el subproceso 1 está bloqueado, el subproceso 2 esperará para siempre, pero el bloqueo no necesariamente esperará. Si no se puede obtener el bloqueo, el subproceso puede finalizar sin esperar.
5. Los bloqueos sincronizados son reentrantes, ininterrumpibles e injustos, mientras que los bloqueos Lock son reentrantes, juzgables y justos (ambos son posibles).
6. El bloqueo de bloqueo es adecuado para problemas de sincronización con una gran cantidad de código sincronizado, y el bloqueo sincronizado es adecuado 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 sincronizado y Lock. Hay algunas diferencias en la implementación.
Synchronized utiliza un mecanismo de bloqueo pesimista y la JVM administra la sincronización para su ejecución. Después de JDK1.6, se utilizan bloqueos sesgados, bloqueos livianos, bloqueos pesados y actualizaciones de bloqueos para la optimización.
La cerradura utiliza un mecanismo de bloqueo optimista. El código que controla el bloqueo se personaliza y optimiza mediante el bloqueo de giro CAS.