[Java]A diferença entre sincronizado e volátil

Sabemos que existem três características importantes da programação simultânea: atomicidade, ordem e visibilidade . Vamos analisar a diferença entre sincronizado e volátil a partir desses três aspectos.

Atomicidade:

volátil não pode garantir a atomicidade

sincronizado é um bloqueio exclusivo. O código modificado por sincronizado não pode ser interrompido, portanto é atômico.

Ordem

O compilador JVM binário volátil e o processador reordenam instruções modificadas por voláteis

sincronizado garante a sequência serializando a execução do programa.As instruções de código no bloco de código sincronizado também podem ser reordenadas.

visibilidade

volátil usa o bloqueio de instruções de máquina para forçar os dados modificados na memória de trabalho a serem descarregados para a memória principal e força os dados da memória de trabalho de outros threads a se tornarem inválidos, garantindo assim a visibilidade.

sincronizado usa as instruções jvm monitorenter e monitorexit para serializar o código.Durante o monitorexit,todos os recursos compartilhados serão atualizados na memória principal,garantindo assim a visibilidade.

おすすめ

転載: blog.csdn.net/qq_67548292/article/details/131911294