Java 在单独的线程中启动zookeeper

Java 在单独的线程中启动zookeeper,java,multithreading,configuration,distributed,apache-zookeeper,Java,Multithreading,Configuration,Distributed,Apache Zookeeper,我试图通过以下方式将多个嵌入式zookeeper服务器从Java应用程序启动到单独的线程中: String port1 = "2181"; String directory1 = new File(System.getProperty("java.io.tmpdir"), "zookeeper/data1").getAbsolutePath(); final ServerConfig config1 = new ServerConfig(); config1.parse(new String[]

我试图通过以下方式将多个嵌入式zookeeper服务器从Java应用程序启动到单独的线程中:

String port1 = "2181";
String directory1 = new File(System.getProperty("java.io.tmpdir"), "zookeeper/data1").getAbsolutePath();
final ServerConfig config1 = new ServerConfig();
config1.parse(new String[] { port1, directory1 });
new Thread(new Runnable() {      
  @Override
  public void run()
  {
    try{
      ZooKeeperServerMain zk = new ZooKeeperServerMain()
      zk.runFromConfig(config1);
    }catch(Exception e){
      e.printStackTrace();
    }        
  }
}).run();    
当我以这种方式启动zk时,主进程被阻塞,其余指令不执行! 有没有合适的方法在单独的线程中启动zookeeper?

您在
线程上调用的是
run()
,而不是
start()

new Thread(new Runnable() {      
@Override
public void run()
{
  try{
    ZooKeeperServerMain zk = new ZooKeeperServerMain()
    zk.runFromConfig(config1);
  }catch(Exception e){
    e.printStackTrace();
  }        
}
}).start(); 
您正在
线程上调用
run()
而不是
start()

new Thread(new Runnable() {      
@Override
public void run()
{
  try{
    ZooKeeperServerMain zk = new ZooKeeperServerMain()
    zk.runFromConfig(config1);
  }catch(Exception e){
    e.printStackTrace();
  }        
}
}).start();