gpt4 book ai didi

java - thread.run() 有效,而 thread.start() 无效

转载 作者:行者123 更新时间:2023-12-01 19:04:15 25 4
gpt4 key购买 nike

以下是我的主要类(class)。

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() run 方法就会被调用。如果我调用 fileThread.start() ,则不会调用 run 方法。以下是我的线程类。我不知道我做错了什么。

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() 实现 - 该方法很可能在您检查 print 语句之前完成或终止。仅供引用,fileThread.run() 是顺序调用,而 fileThread.start() 是并行调用。

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

编辑:

很明显,调用 fileThread.join() 可以帮助您解决问题,但是为什么这会起作用呢?如果您调用 fileThread.join(),主线程将等待,直到目标(在本例中为您的 fileThread 对象)终止。

关于java - thread.run() 有效,而 thread.start() 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10796264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com