Pergunta

Nota : Eu li outros posts sobre como bloquear e desbloquear um arquivo. Eu não achei nada de especial que eu não estava ciente. Então, eu estou indo pôr meu cenário aqui para que alguém possa dar algumas sugestões para fora.

Na minha experiência, FileChannel.lock não garante a situação de bloqueio e desbloqueio de um arquivo quando diferentes objetos de várias instâncias de JVM estão tentando bloquear e atualizar o arquivo.

O cenário na minha candidatura são - existem três programas separados que atualizar um arquivo. Esses programas são executados em diferentes instâncias JVM. Dizem que os programas são A, B, e C, eo arquivo é F. Se A bloqueia o arquivo F, B e C deve esperar por F para ser lançado antes de um dos outros programas podem obter um porão para ele. Esta multa funciona se os programas são executados na mesma instância do JVM. Infelizmente isso não funciona em várias instâncias JVM.

Eu tinha uma outra idéia que era para ter um arquivo simples onde eu indicar se F deve ser atualizado. O conteúdo desse arquivo simples pode ser bloqueado ou desbloqueado. Padrão / valor inicial seria desbloqueado. Assim, quando um dos programas que deseja atualizar F, ele precisa ver a bandeira no arquivo simples. Se o sinalizador lê bloqueado, ele deve esperar. Nesta abordagem, há um problema embora - o que se vários programas de abrir o arquivo simples exatamente ao mesmo tempo e ver "destravado" ou dois programas que estavam esperando para o arquivo simples para ler desbloqueado e exatamente ao mesmo tempo o arquivo Consulte lê " destravado "?

Alguma idéia caras?

Foi útil?

Solução

Se precisar de bloqueio em um sistema de arquivos, então você deve criar um diretório. Diretório existe meios "bloqueado", faltando meios diretório desbloqueado.

A razão é que criar e apagar diretórios devem ser operações atômicas em qualquer sistema de arquivos. Assim, logo que dois processos tentar criar o mesmo diretório, um deles receberá um erro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top