栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Window后台同时运行多个Java项目

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Window后台同时运行多个Java项目

目录
  • 需求
  • 一、将Java项目打包成jar
  • 二、写.bat文件

需求
  • 1

我的Java程序(一个java文件、一些外部jar包、数据集)需要跑30个函数,常规做法就是写个for循环,遍历这30个函数,但是程序每跑一个函数就需要40min,这样的话,使用for循环跑完30个函数就得20h,此外也使得CPU的利用率不高(因为实验室的服务器装的是Window系统,可以充分压榨)。所以我就想,电脑上有16个核,自然可以并行运算,这样使得时间大大缩短,而且CPU利用率也提搞了。

  • 2

首先想到的是多线程、多进程、GPU,但是经过实验多线程,发现使用多线程后还没我用for循环串行执行快,自己也分析了原因:(1)多线程是提高并发性,对运行时间长、复杂的程序意义不大(2)也可能程序编写的有问题(后续会深入学习多线程);对于多进程的话,网上只有Runtime的exec()⽅法、使⽤ProcessBuild方法两种,感觉这两个方法就是启动外部程序那种,可以利用dos命令作为参数,感觉不行。

  • 3

自己看到IDEA软件可以同时运行多个Java程序,即多个控制台。它这种就是多进程,但是我总不能把我的程序(java文件复制30份,又因为同一路径下不能有相同的java文件名称,所以要放到30个不同的文件夹下或者30个名字不同的java文件),这样手动处理太麻烦了。

  • 4

巧好jar包可以利用java -jar xxx.jar就可以运行自己的程序,而且这个命令后面可以跟参数,这些参数将被传到java文件中的mian方法中形参String[] arg,所以自己可以利用java -jar xxx.jar 函数序号,这条命令就可以指定运行某个函数了,所以我只有多输入几个上述命令,只要函数序号不同,就可以实现多个进程同时运行,而多个命令的运行,则可以使用bat文件(批处理文件)。

一、将Java项目打包成jar

原因:因为java可以使用java -jar xxx.java命令,就可以运行这个程序,打包jar包时可以选择一个mainclass作为主类,使得运行上述命令时,就相当于运行的是那个自己选择的主类中的main函数。

步骤:将Java项目打包成.jar文件,可以参考这篇文章。

https://blog.csdn.net/weixin_43868148/article/details/124539092

二、写.bat文件
1.新建start_all.bat文件,内容如下:

@echo off
cd %CD%
start "start_all" javaw -jar HLO.jar 1 2 3
start "start_all" javaw -jar HLO.jar 4 5
start "start_all" javaw -jar HLO.jar 6 7 8
start "start_all" javaw -jar HLO.jar 9 10
start "start_all" javaw -jar HLO.jar 12 12 13
start "start_all" javaw -jar HLO.jar 14 15
start "start_all" javaw -jar HLO.jar 16 17 18
start "start_all" javaw -jar HLO.jar 19 20
start "start_all" javaw -jar HLO.jar 21 22 23
start "start_all" javaw -jar HLO.jar 24 25
start "start_all" javaw -jar HLO.jar 26 27 28
start "start_all" javaw -jar HLO.jar 29 30
Pause

2.双击start_all.bat文件即可运行

注意:

(1)每条命令必须要用start(只用javaw -jar HLO.jar 1 2 3不能同时执行多条,只能执行完一条在执行下一条)

(2)每条命令必须在start指令后加“start_all”(“start_all”指的是该bat文件名称)

(3)每条命令必须使用javaw指令,不能使用java指令(java指令不能后台执行,且必须开着DOS窗口,一旦DOS窗口关闭,程序就会终止)

(4)每条命令后跟的数组是该进程对应的程序执行的函数号(自己程序里面需要解析后面跟的函数号,解析如下)

    public static void main(String[] args) {
        int[] funcIndex = new int[args.length];
        for (int i = 0; i < args.length; i++) {
            funcIndex[i] = Integer.parseInt(args[i]);
        }
        QHLO_KX.fun = funcIndex;
    }```
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/995882.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号