如何从两个线程之间最快的检索结果

How to retrieve the result from the fastest between two threads

我的 Android 应用程序的主要用途是非常快速地获取一个 URL,我需要实现两种获取该网站的方法:

由于有时在没有代理的情况下加载网站会导致 http 错误,我想同时尝试两种方式并选择最快的方式。

这是我到目前为止尝试过的:

    final boolean[] thread1Done = {false};
    final boolean[] thread2Done = {false};

    new Thread(new Runnable() {
        @Override
        public void run() {
            website = fetchWebsiteViaProxy();
            thread1Done[0] = true;
        }
    }).start();
    
    new Thread(new Runnable() {
        @Override
        public void run() {
            website = fetchWebsiteWithoutProxy();
            thread2Done[0] = true;
        }
    }).start();


    //Wait until both threads are done and at least one has managed to fetch the website
    while (thread1Done[0] == false || thread2Done[0] == false || website.length() == 0) {
        Thread.sleep(10);
    }
    
    //... continue

以上只是伪代码,因此为了这个示例,我们可以假设至少有一个线程将始终设法成功获取网站。

但我认为一定有比只用 while() 等待结果更好的方法。

感谢您的帮助。

您需要支持哪个版本的Android?你可以使用 CompletableFuture 吗?如果是,您可以使用以下模式:

 CompletableFuture<Website> future = new CompletableFuture<>();

new Thread(new Runnable() {
  @Override
  public void run() {
    website = fetchWebsiteViaProxy();        
    future.complete(website);
  }
}).start();

new Thread(new Runnable() {
  @Override
  public void run() {
    website = fetchWebsiteWithoutProxy();        
    future.complete(website);
  }
}).start();

//return the result fromt he faster thread
Website result = future.get();