线程没有启动?

时间:2014-12-12 00:26:24

标签: java

我正在研究一个项目,并且在调用.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) {}
    }

}

2 个答案:

答案 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>