簡體   English   中英

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

[英]thread.run() works and thread.start() not works

以下是我的主要課程。

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
    }
}

如果輸入typeThread.run(),則會調用運行方法。 如果我調用fileThread.start(),則不會調用運行方法。 以下是我的線程類。 我不知道我在做什么錯。

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類。

編輯:

因此,顯然調用fileThread.join()幫助您解決問題,但是為什么這樣做有效呢? 如果調用fileThread.join() ,則主線程將等待直到目標(在本例中為fileThread對象)終止。

fileThread.run()永遠不會啟動新線程。 要啟動新線程,您必須調用fileThread.start()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM