在Java中的多线程环境中分配唯一代理

时间:2017-10-25 03:03:21

标签: java multithreading soap proxy jvm

我知道Java支持通过设置系统属性来使用代理:

System.setProperty("http.proxyHost", "domain.com");     
System.setPropery("http.proxyPort", "8080");

或者使用ProxySelector类。

使用ProxySelector类的好处是可以仅针对特定URL启用它。

我的需求有点不同。

我想在连接到外部(SOAP)Web服务时设置特定代理,但我想更改每个线程的代理。换句话说,我将使用多个线程连接到SOAP Web服务,我希望线程使用代理线程b 来使用代理b 等(而不是在整个JVM中使用一个代理)

这可能吗?

澄清:我希望能够同时访问两个+不同的代理,而不是顺序访问,因此任何需要我锁定/同步访问的解决方案都无法正常工作。

1 个答案:

答案 0 :(得分:1)

您已经拥有解决方案的各个方面。实现您自己的ProxySelector,并在select方法中,根据调用select方法的线程选择不同的代理。

您的ProxySelector实现中可以有Map<Thread,Proxy>来存储和选择每个线程的代理(确保以线程安全的方式访问/更新此映射)