【问题标题】:java - multiple http requests at same time With multi threading in javajava - 多个http请求同时在java中使用多线程
【发布时间】:2016-02-04 09:45:27
【问题描述】:

我同时调用多个请求(10)HTTP GET方法。这里调用方法将创建不同的线程(如线程1,线程2 ....)

调用方法:

enter code here: for(int i=0;i<10;i++){Thread.currentThread().getId();HttpClient httpClient = new HtpClient(url);res = httpClient.get(5000);}

然后请求将到达应用程序入口点。入口点将为每个请求创建新线程(如线程 11、线程 12 ....)。

enter code here//public void DoProcess(){Thread.currentThread().getId();// New threads for each request.else........}

但我想知道哪个调用者线程请求创建了应用程序线程。

像线程 1 属于线程 11

 Thread 2 belongs Thread 12

请告诉我,如何实现这一点。

【问题讨论】:

  • 当线程 1 创建线程 11 时,您将线程 1 的引用传递给线程 11。

标签: java multithreading executorservice


【解决方案1】:

客户端通过TCP连接,所以有一个socket客户端ip和端口。 我不知道 HTTPClient api,但如果有 getClientPort() 那么你应该能够打印出时间、线程名称和客户端 ip+端口。在服务器上,无论接受什么套接字都将具有客户端 ip 和端口。如果这是一个 servlet 容器,则 servlet 请求具有 getRemoteAddress() 和 getRemotePort()。在那里你也可以打印出时间、ip+port 和线程名称。如果您将这些事件堆积在 2 个表中,您应该能够通过 ip+port 加入客户端时间与服务器时间的容差(尝试间隔小于 2 秒,假设 C 和 S 与 NTP 处于同一时间)。

另一种简单的方法(但它改变了 http 有效负载)是将来自客户端的 HTTP 标头注入到 http 请求中,说明当前线程名称/tid。例如:“my_custom_remote_thread_id:Thread-11”。这样在服务器上,您可以拉取请求标头来计算客户端线程名称/tid。

【讨论】:

    猜你喜欢
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    相关资源
    最近更新 更多