如何在Java中更快地执行多线程?
我尝试使用executor服务方法在Java中实现多线程。这是我的密码:如何在Java中更快地执行多线程?,java,multithreading,performance,optimization,Java,Multithreading,Performance,Optimization,我尝试使用executor服务方法在Java中实现多线程。这是我的密码: public class GetResponseContentWithExecutorService { private static final int MYTHREADS = 30; public static void main(String args[]) throws Exception { ExecutorService executor = Executors.newFixedThrea
public class GetResponseContentWithExecutorService {
private static final int MYTHREADS = 30;
public static void main(String args[]) throws Exception {
ExecutorService executor = Executors.newFixedThreadPool(MYTHREADS);
String[] urlList ={"url1", "url2", "url3" ...};
for (int i = 0; i < urlList.length; i++) {
String baseUrl = "myUrl";
Runnable worker = new MyRunnable(baseUrl, urlList[i].split("-")[0], urlList[i].split("-")[1]);
executor.execute(worker);
}
executor.shutdown();
while (!executor.isTerminated()) {
}
System.out.println("\nCompleted all threads");
}
}
public class MyRunnable implements Runnable {
private final String baseUrl;
private final String a;
private final String b;
MyRunnable(String baseUrl, String a, String b) {
this.baseUrl = baseUrl;
this.a= a;
this.b= b;
}
@Override
public void run() {
String result = "";
int code = 200;
try {
URL siteURL = new URL(baseUrl + a + b);
HttpURLConnection connection = (HttpURLConnection) siteURL.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(3000);
connection.connect();
code = connection.getResponseCode();
if (code == 200) {
result = "-> Succ<-\t" + "Code: " + code;
} else {
result = "-> NoSuc <-\t" + "Code: " + code;
}
}
catch (Exception e) {
result = e.getMessage();
}
System.out.println(code);
}
}
公共类GetResponseContentWithExecutorService{
私有静态最终整数=30;
公共静态void main(字符串args[])引发异常{
ExecutorService executor=Executors.newFixedThreadPool(MYTHREADS);
字符串[]urlList={“url1”、“url2”、“url3”…};
for(int i=0;i result=“->Succ NoSuc如果只有一个可用的内核,则while(!executor.isTerminated()){
可能正在窃取您所有的CPU。无论如何,您应该使用等待终止
来代替。如果这不是问题所在,可能的解释包括:1)您正在使本地网络饱和,2)您正在使服务器饱和,或3)服务器正在限制您的请求速率。如果您只有一个可用的内核,则(!executor.isTerminated()){}
可能正在窃取您的所有CPU。无论如何,您应该使用等待终止
来代替标题。如果这不是问题所在,可能的解释包括1)您的本地网络饱和,2)服务器饱和,或3)服务器限制您的请求速率。