从主
剪断 public void xmlQuery(String x,String y){
//takes spaces off the input
String k = x.trim();
String v = y.trim();
//calling the threading class
for(int i = 0; i<18; i++){
callThreading.threadedCall(i,k,v);
}
}
线程类
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class callThreading {
public static void threadedCall(int th, String k, String v){
switch(th){
case 0:Thread currentThread0 = new Thread(threadedCall0(th, k, v)).start();
break;
case 1:Thread currentThread1 = new Thread(threadedCall1(th, k, v)).start();
break;
case 2:Thread currentThread2 = new Thread(threadedCall2(th, k, v)).start();
break;
case 3:Thread currentThread3 = new Thread(threadedCall3(th, k, v)).start();
break;
case 4:Thread currentThread4 = new Thread(threadedCall4(th, k, v)).start();
break;
case 5:Thread currentThread5 = new Thread(threadedCall5(th, k, v)).start();
break;
case 6:Thread currentThread6 = new Thread(threadedCall6(th, k, v)).start();
break;
case 7:Thread currentThread7 = new Thread(threadedCall7(th, k, v)).start();
break;
case 8:Thread currentThread8 = new Thread(threadedCall8(th, k, v)).start();
break;
case 9:Thread currentThread9 = new Thread(threadedCall9(th, k, v)).start();
break;
case 10:Thread currentThread10 = new Thread(threadedCall10(th, k, v)).start();
break;
case 11:Thread currentThread11 = new Thread(threadedCall11(th, k, v)).start();
break;
case 12:Thread currentThread12 = new Thread(threadedCall12(th, k, v)).start();
break;
case 13:Thread currentThread13 = new Thread(threadedCall13(th, k, v)).start();
break;
case 14:Thread currentThread14 = new Thread(threadedCall14(th, k, v)).start();
break;
case 15:Thread currentThread15 = new Thread(threadedCall15(th, k, v)).start();
break;
case 16:Thread currentThread16 = new Thread(threadedCall16(th, k, v)).start();
break;
case 17:Thread currentThread17 = new Thread(threadedCall17(th, k, v)).start();
break;
}
}
public static Runnable threadedCall0(int th, String k, String v){
System.out.println("call0");
return null;
}
public static Runnable threadedCall1(int th, String k, String v){
System.out.println("call1");
return null;
}
}
...并且方法继续进行threadedCall17
编辑编辑以尽我所能反映MVCE。
我正在尝试同时多线程连接所有URL连接,以便减少程序的加载时间。当前加载时间约为11秒。 callThreading类中的参数int th从main方法中的for循环传递,int从0 ++传递到17.
有人指出,如果我要一次完成所有18个电话,那么回报会减少。一旦线程正常工作,我将修改不同的费率。
列出的代码导致“类型不匹配:无法从void转换为线程”错误。
如果我缺少任何细节,请告诉我。
答案 0 :(得分:2)
第一条评论。您的threadCall
方法很奇怪。每次调用它时,它会创建18个Thread对象,启动其中一个并抛弃其余对象。奇。但是,这不会导致线程瓶颈。 (未使用的线程永远不会开始......)
threadedCallNN
方法中也有一些不良编码,但没有任何会导致线程瓶颈。
基本上,您向我们展示的代码中没有任何内容可以解释问题。
如果没有MCVE 我们可以自己运行,我们只能猜测为什么你没有加快速度。一些可能的解释:
限制因素可能是端到端网络连接的吞吐量。
限制因素可能是远程服务器提供数据的速率。
远程服务器可能会对您进行速率限制;例如通过逐个处理您的请求。
如果真正的解释是其中任何一个,那么多线程将无济于事。
您可以通过添加一些跟踪来获得一些见解。例如,尝试查看线程是否实际上是在尝试同时读取数据,或者是否有某些事情导致它们一次执行一个线程。
答案 1 :(得分:2)
Thread currentThread1 = new Thread(...).start();
Thread.start()
不会返回Thread
。这是一种无效的方法。因此,您无法使用结果初始化任何内容。
你可以通过各种方式解决这个问题,但最简单的是:
Thread currentThread1 = new Thread(...);
currentThread1.start();
我真的不明白为什么你有这些Thread
个变量。一个人会这样做。然后,您可以将start()
调用移至switch
语句之后:
Thread currentThread;
switch th)
{
case 0:
currentThread = new Thread(...);
break;
// ...
default:
// unreachable, just to shut up the compiler
return;
}
currentThread.start();