Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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中更快地执行多线程?_Java_Multithreading_Performance_Optimization - Fatal编程技术网

如何在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

我尝试使用executor服务方法在Java中实现多线程。这是我的密码:

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;iresult=“->Succ NoSuc如果只有一个可用的内核,则
while(!executor.isTerminated()){
可能正在窃取您所有的CPU。无论如何,您应该使用
等待终止
来代替。如果这不是问题所在,可能的解释包括:1)您正在使本地网络饱和,2)您正在使服务器饱和,或3)服务器正在限制您的请求速率。如果您只有一个可用的内核,则
(!executor.isTerminated()){}
可能正在窃取您的所有CPU。无论如何,您应该使用
等待终止
来代替标题。如果这不是问题所在,可能的解释包括1)您的本地网络饱和,2)服务器饱和,或3)服务器限制您的请求速率。