thread.run() 有效,而 thread.start() 不起作用



以下是我的主要课程。

public class ShareData {
    /**
     * @param args
     */
    public static void main(String[] args) {
        ShareReader aShareReader = new ShareReader("http://test.com:9000", "dilip.id@gmail.com", "password");
        Thread fileThread = new Thread(aShareReader);
        fileThread.run(); // fileThread.start() not calling the run() method
    }
}

如果我键入fileThread.run()运行方法被调用。 如果我调用 fileThread.start() 则不会调用运行 metod。 以下是我的线程类。 我不知道我做错了什么。

public class ShareReader implements Runnable {
    private String itsShareURL =    null;
    private String itsUserId        =   null;
    private String itsPassword      =   null;
    private String itsAuthToken     =   null;
    private String itsLoginURL      =   null;
    private String itsChannelUpateURL   =   null;

    /**
     * 
     */
    public ShareReader(String theShareURL, String theUserId, String thePassword) {
        this.itsShareURL    =   theShareURL;
        this.itsUserId          =   theUserId;
        this.itsPassword        =   thePassword;
        this.itsLoginURL        =   itsShareURL + "/v1.0-SNAPSHOT/login";
        this.itsChannelUpateURL =   itsShareURL + "/v1.0-SNAPSHOT/updateChannelSubscription/";
    }
    public void run() {
        JSONObject json;
        JSONArray jsonArray;
itsAuthToken = getToken(itsUserId, itsPassword);
    updateChannelList(itsAuthToken);
    String aURL = "http://test.com:9000/v1.0-SNAPSHOT/userTimeline/"+itsAuthToken+"/";
    try {
        String lat = null;
        String lon = null;
        String udid = null;
        String dateTime =  null;
        String eventID = null;
        aEventBean = new EventBean();
        jsonArray = readJsonArrayFromUrl(aURL);
        for (int i = 0; i < jsonArray.length(); i++) {
            json = jsonArray.getJSONObject(i);
            lat = json.getString("lat");
            lon = json.getString("lon");
            udid = json.getString("udid");
            eventID = json.getString("eventId");
            dateTime = json.getString("dateTime");
            aEventBean.setItsLatitude(lat);
            aEventBean.setItsLongitude(lon);
            aEventBean.setItsUDID(udid);
            aEventBean.setItsEventIdentifier(eventID);
            aEventBean.setItsDateTime(dateTime);
            System.out.println(udid + " ---> " +lat + " ==== " + lon);
            sendData(aEventBean);
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
}
}

对不起,如果我问这么基本的问题..理想情况下,我需要做 fileThread.start() 来启动一个线程。提前感谢...

如果你在fileThread上调用start(),肯定会调用run()。检查 run() 的实现 - 此方法很可能在您检查打印语句之前完成或终止。仅供参考,fileThread.run()是顺序调用,而fileThread.start()是并行调用。

另一个模糊的可能性是,你没有实现Java的runnable;相反,这可能是你项目中的某个自定义Runnable类。

编辑:

所以显然打电话给fileThread.join()可以帮助您解决问题,但为什么会这样呢?如果调用 fileThread.join() ,则主线程将等待,直到目标(在本例中为 fileThread 对象)终止。

fileThread.run() 从不启动新线程。要启动一个新线程,您必须调用 fileThread.start()。

最新更新