[英]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.