【发布时间】:2017-01-31 02:36:58
【问题描述】:
我对使用 Ant fork 方法的多线程进程有疑问
以下是 Jar 文件和相关的 java 类和方法
Test1.jar 有 --Test1.java 有 --方法A()
Test2.jar 有 --Test2.java 有 --方法B()
Test3.jar 有 --Test3.java 有 --方法C()
runtime.classpath 会有:Test1.jar、Test2.jar 和 Test3.jar
testsuite.list: Test1.tsv,Test2.tsv,Test3.tsv
Test1.tsv --> calls MethodC(), MethodB(), MethodA() in sequence
Test2.tsv --> calls MethodA(), MethodB(), MethodA() in sequence
Test3.tsv --> calls MethodB(), MethodA(), MethodA() in sequence
蚂蚁脚本:
<for list="${testsuite.list}" param="testsuite" parallel="true" threadCount="3">
<sequential>
<local name="cmdLine.args" />
<property name="cmdLine.args" value="--variable ENV:${env.file} --listener TListener ${tag.option} @{testsuite}"/>
<java classname="org.TestWork" classpathref="runtime.classpath" fork="true" maxmemory="1024M">
<arg line="${cmdLine.args}"/>
</java>
</sequential>
</for>
<java classname="org.TestWork" classpathref="runtime.classpath" fork="true" maxmemory="1024M">
<arg value="--output"/>
<arg value="output.xml"/>
</java>
Ant 脚本触发时
线程 1 拾取 Test1.tsv 线程 2 拾取 Test2.tsv 线程3拾取Test3.tsv
现在我的问题是当 3 个线程并行执行时,会创建每个 Test1.java、Test2.java 和 Test3.java 的 3 个实例,或者只有一个 Test1.java、Test2.java 和 Test3.java 实例?
如果在 Thread1 执行 MethodA() 时只创建了一个 Test1.java、Test2.java 和 Test3.java 实例,那么 Thread2 必须等到 Thread1 完成 MethodA() 执行?
可以帮助我理解这一点。另外,有没有办法我可以知道一次执行给定方法的线程数,是否发生任何锁定或创建了多少 java 实例?
需要注意的另一点是我的 MethodA()、MethodB()、MethodC() 的实现具有等待时间和重试机制来查找 Web 元素。所以我不确定多个线程何时执行正在发生的事情。有时我看到完成方法执行有很多延迟,所以想知道是否发生了任何锁定。
【问题讨论】:
标签: java multithreading ant ant-contrib