2017-01-31 2 views
0

У меня есть вопросы относительно многопоточного 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() имеет реализации, у которых есть время ожидания и механизм повтора для поиска веб-элементов. Поэтому я не уверен, когда несколько потоков выполняют то, что происходит. Иногда я вижу много задержки для завершения выполнения метода, поэтому задаюсь вопросом, происходит ли какая-либо блокировка.

ответ

0

Согласно вашему описанию, я имею несколько общих глобальных ресурсов, к которым обращаются потоки. Поэтому потоки должны делиться общими ресурсами, не разделенными.

Если только один экземпляр Test1.java, Test2.java и Test3.java создали в то время как Резьба1 exeucting Methoda(), Резьба2 должен ждать, пока Резьба1 не завершит Methoda() исполнение?

Да, Правильно. Но никто не может гарантировать порядок.

Также есть способ, которым я могу знать, сколько потоков выполняется при заданном методе за раз?

Да, Есть несколько способов сделать,

  • Вы можете использовать блокировку + другой защищенной глобальную переменную, которая будет увеличиваться в начале метода & декрементируется в конце метода. (Старый путь - более явный)
  • Семафор - вы можете использовать getQueueLength() для этой цели. (Самый простой способ - менее явная реализация)
  • A synchronized block.

Я предпочитаю второй (семафор), поскольку он является самым мощным & самым простым.

Есть ли какие-либо блокировки или сколько экземпляров java создано?

Не будет никакой блокировки по умолчанию, если вы не внедрили или не использовали .

+0

1. Да, это библиотека. Как я могу подтвердить для каждого тестового * .tsv-файла отдельный экземпляр java, созданный вместо этого, используя один и тот же экземпляр среди всех потоков 2. Кроме того, скажем, 100 потоков, пытающихся выполнить MethodA() за один раз, что произойдет в этом случае. дождитесь завершения первой нити или пока поток thread1 работает thread2 также внесет изменения и даст резкие результаты оцените ваши входы – gorants

+0

(1) Если вы используете библиотеку без создания глобальных объектов, она отдельная. Думаю, ты понял. Для более четкого ответа вы можете поместить свой код? В противном случае могут возникнуть недоразумения. :)) (2) Резких результатов не будет, если вы внедрили правильный механизм блокировки. .. Снова, пожалуйста, разместите свой код здесь, чтобы я мог ответить соответственно, иначе все, что я могу сделать, это дать общие комментарии. :)) –

+0

For1: У меня есть несколько java-файлов, поэтому я не могу опубликовать весь код. все, что я могу сказать, есть в классе java. У меня есть статические переменные и методы, к которым обращаются в других классах. И некоторые классы имеют время ожидания потока. Итак, в этом случае, даже если Thread 1 pickup Test1.tsv Thread 2 pickup Test2.tsv Thread 3 pickup Test3.tsv с заданной конфигурацией ant xml. все еще разделенные экземпляры, разбитые статические методы, экземпляры классов, разделяемые всеми потоками. что вы подразумеваете под глобальными объектами. – gorants

Смежные вопросы