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

标签 java multithreading soap proxy jvm

我知道 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/

相关文章:

python - 多线程模式下的 aiosqlite 和 SQLite 有什么区别?

java - 为什么指定了 wait 后,lock wait 下面的行仍被执行?

multithreading - WAIT_ABANDONED_0 何时返回

java - 一个程序中有多个Elasticsearch连接

linux - 使用 C 中的 pthread 保持线程数恒定

javascript - SharePoint 获取当前用户属性

node.js - 在node.js中处理soap和wsdl webservice

C# - 按日期列对数据表进行排序并仅将前 10 条记录绑定(bind)到网格

java - 判断客户端浏览器是否安装了java,是否可以启动小程序

java - 如何快速将大数据传输到mysql(JDBC)?