2

我正在尝试使用不同的线程和 SVNKit 并行连接到许多 SVN 存储库。

在线查看一些代码示例,看起来在使用 SVNKit 之前我必须使用静态方法对其进行初始化

DAVRepositoryFactory.setup();
SVNRepositoryFactoryImpl.setup();
FSRepositoryFactory.setup();

显然,静态方法让我担心多线程环境。我的问题是:

  1. 是否可以以这种方式并行使用 SVNKit?
  2. 我什么时候需要调用这些设置方法?只在软件开始时,每个线程一次,什么?

如果有人能解释我必须调用这些方法的原因,我也会很高兴。

4

1 回答 1

2

在不同线程中创建存储库实例之前,您只需调用此方法一次。

来自 SVNRepositoryFactoryImpl javadoc:

在使用库之前在您的应用程序中执行一次,可以通过 svn 协议(通过 svn 和 svn+ssh)使用存储库

这是一个带有 2 个存储库(单线程)的示例代码:

SVNRepositoryFactoryImpl.setup(); // ONCE!

String url1 = "svn://host1/path1";
SVNRepository repository1 = SVNRepositoryFactory.create(SVNURL.parseURIDecoded(url1));
String url2 = "svn://host2/path2";
SVNRepository repository2 = SVNRepositoryFactory.create(SVNURL.parseURIDecoded(url2));

在多线程环境中,您可以创建一个实现 Runnable 的类:

public class ProcessSVN implements Runnable {

    private String url;

    public ProcessSVN(String url) {
        this.url = url;
    }

    public void run() {
        SVNRepository repository = SVNRepositoryFactory.create(SVNURL.parseURIDecoded(url));
        // do stuff with repository
    }
}

并像这样使用它:

SVNRepositoryFactoryImpl.setup(); // STILL ONCE!

(new Thread(new ProcessSVN("http://svnurl1"))).start();
(new Thread(new ProcessSVN("http://svnurl2"))).start();
于 2010-09-16T22:06:36.757 回答