【问题标题】:Java thread not running to completion, why?Java线程没有运行完成,为什么?
【发布时间】:2011-02-16 23:14:42
【问题描述】:

我有一个 Runnable,它通过在其运行方法中执行以下操作将数据(几百个文件)从 android 设备传输到 PC

  1. 使用 Runtime.exec(CMD) 创建进程并执行命令
  2. CMD 是将数据从设备传输到运行此线程的 PC 的命令。 (这是安卓的 adb pull 命令)

我有一个主程序,它创建一个线程并启动这个可运行文件。可运行文件开始运行并执行“adb pull”命令并开始传输数据,但它似乎在完成完整传输之前不久就暂停了。如果我强制退出主程序,传输将运行完成。

如果我在不使用其他线程的情况下从主程序本身执行命令,我不会遇到任何问题。

为什么我会遇到这个问题?

【问题讨论】:

    标签: java android multithreading process adb


    【解决方案1】:

    您需要使用命令的输出。

    这个问题展示了如何在 shell 脚本而不是你的代码中使用输出:Java ProcessBuilder: Resultant Process Hangs

    如果您想在 Java 代码中使用输出,基本上您会从 Process.InputStream 提供的 InputStream 中读取。

       Process process = Runtime.exec(CMD);
       InputStream in = process.getInputStream();
       // Repeatedly read from the input stream until eof.
    

    这会阻塞,直到其他进程完成。如果你想要并发,你可以在另一个线程中读取输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-12
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      相关资源
      最近更新 更多