我尝试与此代码并行运行Jsoup(版本1.11.2):
public class JsoupParallelRunner {
private static String[] urls = { ... some URLs ...}
public static void main(String... args) {
ExecutorService executor = Executors.newFixedThreadPool(10);
for (String url : urls) {
executor.execute(() -> {
try {
Connection c = Jsoup.connect(url);
Connection.Response r = c.execute();
} catch (IOException e) {
e.printStackTrace();
}
});
}
}
但如果我在FixedThreadPool
中使用超过6个并行线程,则会在Jsoup的java.net.UnknownHostException
方法中抛出execute()
。 6岁以下没有问题。
根据jsoup thread safety Jsoup是线程安全的。
如果有任何帮助:我的CPU有2个核心(4个虚拟)。
更新:这似乎只是我电脑的问题。我在其他两台计算机上试过它(相同的Java版本,相同的Jsoup版本)并且它在那里工作。
更新2 :这似乎是我的笔记本电脑在某个网络中的问题。我在我的家庭网络上用这台笔记本电脑试了一下 - 它在那里工作了。回去工作 - 同样的问题。其他网络相关似乎工作(浏览器,ssh等)。我想这是一个奇怪的网络问题,与Jsoup无关。
答案 0 :(得分:0)
尝试检查您是否在工作中配置了代理。如果是,那么您必须为 JSOUP 连接提供代理
Document doc = Jsoup.connect(<website.com>).proxy(<host>, <port>).get();