我想使用
synchronized(){}关键字也将不起作用,因为我想同步文件系统访问而不是变量/对象访问。
使用
synchronized可以工作。您假设如果要控制从多个线程对对象 X的 访问,则必须
synchronized在该对象上使用。你不知道
您可以
synchronized在 任何 对象上使用,前提是所有访问都使用同一对象。
实际上,通常 最好 使用单独的
private锁对象进行同步,因为这样一来,类外的代码就无法在锁上进行同步。
因此,您可能会有类似的情况,每个共享文件都有一个实例:
public class SharedFile { private final File path; private final Object lock = new Object(); public SharedFile(File path) { this.path = path; } public void process(.....) throws IOException { synchronized(lock) { try(InputStream = new FileInputStream(path)) { .... } } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)