【发布时间】:2018-06-13 05:21:47
【问题描述】:
抱歉,编辑太长了,
我正在尝试下载 100k url,并开始使用执行器服务进行下载,如下所示,
ExecutorService executorService = Executors.newFixedThreadPool(100);
for (int i = 0; i < list.size(); i++) {
try {
Callable callable = new Callable() {
public List<String> call() throws Exception {
//http connection
}
};
Future future = executorService.submit(callable);
但上述方法一次只下载一个 url..
所以我尝试创建守护线程(如下所示),并且此方法创建了多个下载连接(如预期的那样)..
for(int i=0; i<10; i++) {
Thread t = new Thread("loadtest " + i);
t.setDaemon(true);
t.start();
}
while(true) {
boolean flag = true;
Set<Thread> threads = Thread.getAllStackTraces().keySet();
for(Thread t : threads) {
if(t.isDaemon() && t.getName().startsWith("loadtest")) {
flag = false;
break;
}
}
if(flag)
break;
Thread.sleep(5000);
}
可以在服务器上使用相同的方法进行负载测试吗?
关于如何进行负载测试的任何其他建议也会有很大帮助..
提前致谢!
【问题讨论】:
-
您研究过常规线程和守护线程之间的区别吗?你学到了什么?
-
@JimGarrison 是的,我做了一些研究,我创建守护线程的原因是为了更快地创建更多与服务器的连接。
-
您为什么认为守护线程创建速度更快或允许更多连接到服务器?
-
@JimGarrison 更快我的意思是说我正在从 100k url 下载数据并且 run 方法有数据下载的代码,现在如果我使用执行器服务下载我只能下载一个 url时间,但如果我使用守护线程,我可以创建/下载多个下载连接。
-
抱歉,这些都没有任何意义。
ExecutorService可以设置为并行运行多个线程。
标签: java multithreading daemon load-testing