为什么在java中同时运行和启动调用

  • 本文关键字:运行 启动 调用 java java
  • 更新时间 :
  • 英文 :


我正在学习一个关于如何使用json web服务的教程。

但我有两个疑问,你能帮我理解吗。

我正在从这个链接中学习http://codeoncloud.blogspot.in/2013/05/blackberry-java-json-tutorial.html

下面是一个通过线程扩展的类

public class ConnectJson extends Thread {
private String url;
public String response;
private String myinterface = ";interface=wifi";
public void run() {
HttpConnection conn = null;
InputStream in = null;
int code;
try {
conn = (HttpConnection) Connector.open(this.url + this.myinterface, Connector.READ);
conn.setRequestMethod(HttpConnection.GET);
code = conn.getResponseCode();
if (code == HttpConnection.HTTP_OK) {
in = conn.openInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[in.available()];
int len = 0;
while (-1 != (len = in.read(buffer))) {
out.write(buffer);                   
}
out.flush();
this.response = new String(out.toByteArray());
if (out != null){
out.close();
}
if (in != null){
in.close();
}
if (conn != null){
conn.close();
}
}
} catch (Exception e) {
Dialog.inform(e.toString());
}
}  
public String jsonResult(String url){
this.url = url;
this.start();
this.run();
return response;
}
}

它正在生成该类的一个对象并调用该类的方法。在该方法中,它调用start和run方法,为什么?

this.start();
this.run();?

在该方法中,它调用start和run方法,为什么?

您必须询问代码的作者;看看那个类的代码,它看起来不正确。这也很不寻常。

在正常情况下,您不会直接调用run;启动线程(使用start),然后JVM负责创建一个新线程并在其上调用run

如果您真的想让代码立即在当前线程上运行,可以自己调用run,但这是不寻常的,而且该类看起来并没有立即正确地实现这一点。该代码实际所做的是启动一个新线程(这意味着run最终将在该新线程上被调用),但正如您所观察到的,它直接调用run。因此run将运行两次,并且很可能同时运行两次。由于run中的代码使用了两个线程都将使用的实例变量,但没有协调对这些实例变量的访问。。。再说一遍,这看起来不正确。

我想我不会一直遵循那个教程。您可能会发现Oracle的Java教程中的并发跟踪可能很有用。(线程是其中的一部分。)

最新更新