У меня есть вопросы относительно многопоточного processign с использованием Ant вилочного подходаПонимание многопоточного
Ниже приведены Jar файлы и связанные с ними классы Java и методы
Test1.jar имеет --Test1.java имеет - -MethodA()
Test2.jar имеет --Test2.java имеет --MethodB()
Test3.jar имеет --Test3.java имеет --MethodC()
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
Ant sciprt:
<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>
Когда муравей скрипты вызвали
Thread 1 пикап Test1.tsv Темы 2 пикапа Test2.tsv Темы 3 пикапа Test3.tsv
Теперь мой вопрос, когда 3 нити, исполняющая параллельно, 3 экземпляра каждого Test1 .java, Test2.java и Test3.java. Или будет только один экземпляр Test1.java, Test2.java и Test3.java?
Если только один экземпляр Test1.java, Test2.java и Test3.java, созданный в то время как Thread1 exeucting MethodA(), Thread2 должен ждать, пока Thread1 завершит выполнение MethodA()?
Может кто-нибудь помочь мне это понять. Кроме того, есть ли способ узнать, сколько потоков, выполняющих данный метод за раз, происходит ли какая-либо блокировка или сколько экземпляров java создано?
Другой момент, который следует отметить, - это метод MethodA(), MethodB(), MethodC() имеет реализации, у которых есть время ожидания и механизм повтора для поиска веб-элементов. Поэтому я не уверен, когда несколько потоков выполняют то, что происходит. Иногда я вижу много задержки для завершения выполнения метода, поэтому задаюсь вопросом, происходит ли какая-либо блокировка.
1. Да, это библиотека. Как я могу подтвердить для каждого тестового * .tsv-файла отдельный экземпляр java, созданный вместо этого, используя один и тот же экземпляр среди всех потоков 2. Кроме того, скажем, 100 потоков, пытающихся выполнить MethodA() за один раз, что произойдет в этом случае. дождитесь завершения первой нити или пока поток thread1 работает thread2 также внесет изменения и даст резкие результаты оцените ваши входы – gorants
(1) Если вы используете библиотеку без создания глобальных объектов, она отдельная. Думаю, ты понял. Для более четкого ответа вы можете поместить свой код? В противном случае могут возникнуть недоразумения. :)) (2) Резких результатов не будет, если вы внедрили правильный механизм блокировки. .. Снова, пожалуйста, разместите свой код здесь, чтобы я мог ответить соответственно, иначе все, что я могу сделать, это дать общие комментарии. :)) –
For1: У меня есть несколько java-файлов, поэтому я не могу опубликовать весь код. все, что я могу сказать, есть в классе java. У меня есть статические переменные и методы, к которым обращаются в других классах. И некоторые классы имеют время ожидания потока. Итак, в этом случае, даже если Thread 1 pickup Test1.tsv Thread 2 pickup Test2.tsv Thread 3 pickup Test3.tsv с заданной конфигурацией ant xml. все еще разделенные экземпляры, разбитые статические методы, экземпляры классов, разделяемые всеми потоками. что вы подразумеваете под глобальными объектами. – gorants