Voglio bloccare un file remoto con la stringa "ip + filename" usando java.
public boolean execCmd(String ip,String filename, String command)
{
String file = ip + filename;
String lock = file.intern();
try
{
synchronized (lock)
{
System.out.println(file + "get the lock");
// ssh to remote machine and exec command
System.out.println(file + "release the lock");
}
}
catch(Exception e)
{
}
}
questa funzione è chiamata da multi-thread, ma ho trovato che l'esecuzione è un po 'lenta, sembra essere sequenziale anche per file diversi.
Ora il risultato è simile a questo:
file1 get the lock
file2 get the lock
file3 get the lock
file1 release the lock
file2 release the lock
file3 release the lock
file4 get the lock
file4 release the lock
file5 get the lock
file5 release the lock
file6 get the lock
file6 release the lock
...
i primi tre output di log sembrano essere concomitanti, ma il seguente task sembra essere sequenziale, ho provato per molte volte, il risultato è quasi lo stesso.
Questo è un risultato normale? o c'è qualcosa di sbagliato nel programma?