Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果同时发送多个http请求,如何设置ThreadPoolTaskExecutor?_Java_Multithreading_Executor - Fatal编程技术网

Java 如果同时发送多个http请求,如何设置ThreadPoolTaskExecutor?

Java 如果同时发送多个http请求,如何设置ThreadPoolTaskExecutor?,java,multithreading,executor,Java,Multithreading,Executor,在我的例子中,我需要向客户端的应用程序发送超过百万个http请求以获得弹出通知。就像下面的sudo代码一样 int numOfHttpReq = 1000000; for (int i = 0; i < numOfHttpReq; i++) { call async method with ThreadPoolTaskExecutor ... } int numohttpreq=1000000; for(int i=0;i

在我的例子中,我需要向客户端的应用程序发送超过百万个http请求以获得弹出通知。就像下面的sudo代码一样

int numOfHttpReq = 1000000;
for (int i = 0; i < numOfHttpReq; i++) {
  call async method with ThreadPoolTaskExecutor ...
}
int numohttpreq=1000000;
for(int i=0;i
我引用了这篇文章,得到了一个公式

线程数=可用内核数*(1+等待时间/服务时间)


然而,我认为它不是100%适合我的情况。我想知道在这种情况下如何设置ThreadPoolTaskExecutor,如CorePoolSize、MaxPoolSize、QueueCapacity等。

您只需使用ThreadPoolExecutor提供的构造函数就可以很好地完成这项工作

public ThreadPoolExecutor(int corePoolSize,
        int maximumPoolSize,
        long keepAliveTime,
        TimeUnit unit,
        BlockingQueue<Runnable> workQueue) {
            this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
                    Executors.defaultThreadFactory(), defaultHandler);
        }
public ThreadPoolExecutor(int-corePoolSize,
int maximumPoolSize,
长时间,
时间单位,
阻塞队列(工作队列){
这(corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue、,
Executors.defaultThreadFactory(),defaultHandler);
}

您可以使用工作线程来调用HttpRequest。

只需使用ThreadPoolExecutor提供的构造函数,就可以很好地实现这一点

public ThreadPoolExecutor(int corePoolSize,
        int maximumPoolSize,
        long keepAliveTime,
        TimeUnit unit,
        BlockingQueue<Runnable> workQueue) {
            this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
                    Executors.defaultThreadFactory(), defaultHandler);
        }
public ThreadPoolExecutor(int-corePoolSize,
int maximumPoolSize,
长时间,
时间单位,
阻塞队列(工作队列){
这(corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue、,
Executors.defaultThreadFactory(),defaultHandler);
}

您可以使用worker线程调用HttpRequest。

为什么不看看用于这些性能相关测试的“Gatling”工具呢。您不必担心对象池和其他内容,只需输入,那么在时间跨度内您的用例是什么样的?有多少并发请求/并发用户/…还有其他选项。

为什么不看看用于此类性能相关测试的“Gatling”工具呢。您不必担心对象池和其他内容,只需输入,那么在时间跨度内您的用例是什么样的?有多少并发请求/并发用户/…还有其他选项。

谢谢你的建议。你的意思是没有必要使用ThreadPoolTaskExecutor吗?是的,你不必担心threadpool相关的东西,这些东西将由gatling内部处理。您只需在其中编写rest调用,并将其配置为请求数/并发访问的用户数/如果需要间隔,则也可以。只需查看它的文档就可以了。非常简单。谢谢你的建议。你的意思是没有必要使用ThreadPoolTaskExecutor吗?是的,你不必担心threadpool相关的东西,这些东西将由gatling内部处理。您只需在其中编写rest调用,并将其配置为请求数/并发访问的用户数/如果需要间隔,则也可以。只需签出它的文档,这很简单。