我正在研究一个项目,并且在调用.start()
时,为什么线程不会启动而感到困惑 int count = 0;
while (count < urls.length) {
try {
Thread thread = new Thread(new read(urls[count]));
thread.start();
} catch (Exception e) {
}
count++;
}
但如果我添加
public void start() {
run();
}
读取类中的并将代码更改为
int count = 0;
while (count < urls.length) {
try {
read thread = new read(urls[count]);
thread.start();
} catch (Exception e) {
}
count++;
}
它工作正常。
编辑:这是我的读类代码 它从url读取数据并调用我在类中存储数据等的其他方法。
public class read implements Runnable {
URL url;
public read(String str) throws IOException {
url = new URL(str);
}
public void run() {
try {
URLConnection connect = url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(connect.getInputStream()));
String input;
String[] temp;
int x = 0;
while (x < 10) {
reader.readLine();
x++;
}
while ((input = reader.readLine()) != null) {
temp = input.split(" ");
temp[2].replaceAll("<br>", "");
String name = temp[0];
int flightNum = Integer.parseInt(temp[1]);
String des = temp[2];
if (Airport.containsKey(flightNum) != true) {
addFlight(flightNum, des);
addPassengerReservation(flightNum, name);
}
else {
addPassengerReservation(flightNum, name);
}
}
reader.close();
}catch (Exception e) {}
}
}
答案 0 :(得分:1)
您应该创建一个实现Runnable(ClassA)的类,并覆盖
public void run()
方法。在您的“主要”计划中,您应该致电:
Thread th = new Thread(new ClassA());
th.start();
您永远不应该覆盖start方法,或者调用th.run()
。调用start方法将执行一些“幕后”工作,然后为您调用Runnable
对象的run()
方法。
答案 1 :(得分:0)
Thread.start()
代码使用调度程序注册Thread,调度程序调用{{1}}方法。您需要覆盖run()
方法。不需要隐式调用run()
。< / p>