J'ai 2 threads qui accèdent simultanément au même fichier volumineux (.txt).java Mémoire mappée Fichiers multithread lecture/écriture
1er Le fil lit dans le fichier. 2ème thread écrit dans le fichier.
Les deux threads accèdent au même bloc, par ex. (Début: 0, blocksize: 10), mais avec différents canaux & instances de tampon
Lecteur:
{
int BLOCK_SIZE = 10;
byte[] bytesArr = new byte[BLOCK_SIZE];
File file = new File("/db.txt");
RandomAccessFile randomFile = new RandomAccessFile(file, "r");
FileChannel channel = randomFile.getChannel();
MappedByteBuffer map = channel.map(FileChannel.MapMode.READ_ONLY, 0, BLOCK_SIZE);
map.get(bytesArr , 0, BLOCK_SIZE);
channel.close();
}
Writer:
{
int BLOCK_SIZE = 10;
File file = new File("/db.txt");
RandomAccessFile randomFile = new RandomAccessFile(file, "rw");
FileChannel channel = randomFile.getChannel();
MappedByteBuffer map = channel.map(FileChannel.MapMode.READ_WRITE, 0, BLOCK_SIZE);
map.put(bytesToWrite);
channel.close();
}
Je sais que si les deux commence en même temps, j'obtiendrai des exceptions qui se chevauchent! MAIS ce que je voudrais savoir, à quel moment exactement le chevauchement se produit? Je veux dire quand arrive le "verrou" exactement? Exemple: permet de dire que l'accès get écrivain d'abord, puis si le lecteur essayez d'accéder, à quel point est-il possible ?:
FileChannel channel = randomFile.getChannel();
// 1- can reader access here?
MappedByteBuffer map = channel.map(FileChannel.MapMode.READ_WRITE, 0, BLOCK_SIZE);
// 2- can reader access here?
map.put(bytesToWrite);
// 3- can reader access here?
channel.close();
// 4- can reader access here?
1, 2, 3 ou 4?
Non 4 est sûr, parce que le canal est fermé! Qu'en est-il des autres points?
Merci!
Je ne vois aucun verrou dans votre code. –
Pourquoi utiliser plusieurs threads? Un aperçu de votre cas d'utilisation nous aiderait à vous conseiller. En général, je recommande d'utiliser un seul thread pour les E/S sauf si une situation très spécialisée s'est produite. –
@ChrisK, je pourrais vous donner un cas d'utilisation, mais connaissez-vous JSF ManagedBeans? –