我知道 Java 通过设置系统属性来支持使用代理:
System.setProperty("http.proxyHost", "domain.com");
System.setPropery("http.proxyPort", "8080");
或者使用ProxySelector
类。
使用ProxySelector
类的好处是它可以只针对特定的URL启用。
我的需求有点不同。
我想在连接到外部 (SOAP) Web 服务时设置特定代理,但我想更改每个线程的代理。换句话说,我将使用多个线程连接到 SOAP Web 服务,并且我希望线程 a 使用代理 a,线程 b 使用代理 b 等等(而不是在整个 JVM 中使用一个代理)
这可能吗?
澄清:我希望同时访问两个以上不同的代理,而不是顺序访问,因此任何需要我锁定/同步访问的解决方案都将不起作用。
最佳答案
您已经掌握了解决方案的各个部分。实现您自己的ProxySelector
,并在select
中方法,根据调用 select
的线程选择不同的代理方法。
你可以有一个Map<Thread,Proxy>
在 ProxySelector 实现中存储和选择每个线程的代理(确保以线程安全的方式访问/更新此映射)
关于java - 在 Java 多线程环境中分配唯一代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46923267/