Mon application doit parfois lire et écrire dans un fichier. Et ce travail pourrait se produire dans multithread, donc je devrais synchroniser ces ressources. Voici mon code:Android: Comment synchroniser la ressource dans le bon sens
// write to file
FileOutputStream fos = openFileOutput("data.dat", Context.MODE_PRIVATE);
synchronized (fos) {
ObjectOutputStream writer = new ObjectOutputStream(fos);
// continue to write
}
// read to file
FileInputStream fis = openFileInput("data.dat");
synchronized (fis) {
ObjectInputStream reader = new ObjectInputStream(fis);
// continue to read
}
est-ce que le code ci-dessus est sûr? cela signifie que "data.dat" peut toujours juste lire ou écrire, et juste dans un thread? Si c'est faux, corrigez-moi s'il vous plaît.
Merci de
Il y a 2 problèmes: les 2 verrous ne sont pas identiques, donc la lecture et l'écriture du fichier ne s'excluent pas mutuellement. Plus important encore, vous semblez utiliser une variable locale comme un verrou qui va complètement à l'encontre du but: chaque thread aura un verrou différent et les accès concurrents ne seront pas bloqués. – assylias
@assylias donc, pouvez-vous recommander des idées s'il vous plaît. Je ne peux pas seulement synchroniser la méthode, parce que peut-être un autre thread peut accéder à ces ressources, sans utiliser cette méthode. Merci :) – hqt
En supposant que ce sont des méthodes d'instance (c'est-à-dire non statiques), vous pouvez déclarer un objet final privé lock = new Object(); 'dans votre classe, et l'utiliser comme un verrou. De cette façon, tous les accès par tous les threads à ces deux parties de code seront exclusifs. – assylias