O bom uso dos modificadores de acesso é importante para definir uma implementação coerente com as especificações de projeto, determinando como serão os acessos a classes, métodos e/ou variáveis. Desse modo, pode-se concretizar conceitos como, por exemplo, o encapsulamento e a herança do paradigma orientado a objetos.Este artigo apresentará os modificadores de acesso FINAL, NATIVE, STATIC, SYNCHRONIZED e VOLATILE da linguagem Java , os quais permitem adequar as implementações a uma diversidade de propósitos como, por exemplo, auxiliar na adequação do código a um determinado padrão de projeto e também no reaproveitamento de código legado de outras linguagens.
A forma de garantir que uma tarefa execute as duas ações sem ser interrompida por outra tarefa e, além disso, que nenhuma outra tarefa execute a mesma ação enquanto outra tarefa estiver executando essa ação é utilizando o modificador SYNCHRONIZED.
fonte: DevMedia