Java - url.openStream不能与多线程一起使用

时间:2014-09-12 07:40:02

标签: java

当我尝试从网址中读取json text时,这是一个明显的问题。我在URLReader main函数中进行了测试,它返回文本正常。但是当我在一个线程中调用类外的方法时,IDE没有报告任何Exception和消息,直到我追溯到URLReader

public static String loadText(String path) throws Exception {

    URL url = new URL(path);

    try (BufferedReader in = new BufferedReader(
    new InputStreamReader(url.openStream()))) { /* <--- where it goes wrong */
        String inputLine;
        String lines = "";
        while ((inputLine = in.readLine()) != null) {
            lines += inputLine;
        } return lines;
    } 
}

线url.openStream()在线程的外部调用中保持沉默,但奇怪的是,它在自己的main中总是正常工作。例如,这会导致<html>文字:

public static void main(String[] args) throws Exception {
    System.out.println(text("https://google.com"));
}

-----------------------------------这里的一些代码--------- ------------------------------

线程看起来像:

Thread t = new Thread(new Runnable(){
    public void run() {
        try { Update.updateRecord(); }
        catch (Exception e) {}
    }
}); 

t.start();

可能是什么问题?


修改

正如manouti所提到的,我有一些帖子和Thread t。当我单独离开t.start();时,它可以很好地工作,但不能与其他线程一起工作。

Thread t1, t2, t;

/* defined runnable() here */
t1.start(); t2.start(); t.start(); // <--- went wrong

t.start(); // <--- perfectly

修改

我提醒说,在帖子t1t2中,我调用了System.exit(0);,这导致了进程的退出,而不仅仅是线程。

1 个答案:

答案 0 :(得分:1)

显式问题是由另一个线程的System.exit(0);行造成的。

How a thread should close itself in Java?解释了退出线程的方法,否则exit(0)会中断进程,而不仅仅是线程