A_A333 2018-06-09 10:26 采纳率: 0%
浏览 2723
已采纳

Java多线程问题,线程没被执行的问题

 package test;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ResourceBundle;

public class Command {

    public static void main(String[] args) throws Exception {

        ResourceBundle resource = ResourceBundle.getBundle("config");

        Thread gitThread = new gitStartThread(resource);
        gitThread.start();
        gitThread.join();

        System.out.println("haha");

    }

    static class gitStartThread extends Thread {
        ResourceBundle resource;

        public gitStartThread(ResourceBundle resource) {

            this.resource = resource;
            this.setDaemon(true);

        }

        @Override
        public void run() {
            Process process;
            try {
                process = Runtime.getRuntime().exec(resource.getString("cmd"));
                System.out.println("写入cmd成功");
                PrintWriter writer = new PrintWriter(process.getOutputStream());
                writer.println(resource.getString("GITCMD"));
                writer.flush();
                System.out.println("写入GIT成功,开始拉取...");
                writer.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                System.out.println("gitstart运行异常");
                e.printStackTrace();
            } finally {

            }

        }
    }
}

如上这里线程并不会被运行,而是主线程一下子运行完了,子线程没被执行
注:
resource.getString("cmd")拿到的字符是cmd
resource.getString("GITCMD")拿到的字符是git clone -b wlnsss_dev https://gitee.com/Wx
上面拉取git的字符乱写的,反正程序的最终作用就是

这是一个通过Java调用cmd拉取git到本地的程序,如果在join方法前加入线程睡眠似乎会正常执行,请各位大佬讲解下这是为什么,谢谢啦

  • 写回答

6条回答 默认 最新

  • ZhihengTao 2018-06-10 13:58
    关注

    老哥,你这个不是线程问题,而是进程问题。

    你的程序逻辑是这样的:

    **Process Main -> Thread Main -> Thread gitThread -> ChildProcess cmd **

    你只注意到主进程中的主线程需要等待子线程执行完成,却没有注意到主进程需要等待子进程执行完成。

    所以,你需要在gitThread中等待cmd执行的子进程git完成。

    http://bjyzxxds.iteye.com/blog/444181

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同