Java 如何在单线程旁边运行多线程testng

Java 如何在单线程旁边运行多线程testng,java,multithreading,testng,single-threaded,Java,Multithreading,Testng,Single Threaded,我正在使用testng运行一系列测试,并在parallel=“classes”级别运行它们。问题是我希望3-4个类总是在同一个线程(单线程)上一起运行。所有其他类都可以在任何线程上运行,我不在乎。 有办法做到这一点吗 Example: A B and C need to be ran one-at-a-time. All other classes will be denoted by numbers. Threads running at one time: A 3 7 2

我正在使用testng运行一系列测试,并在
parallel=“classes”
级别运行它们。问题是我希望3-4个类总是在同一个线程(单线程)上一起运行。所有其他类都可以在任何线程上运行,我不在乎。 有办法做到这一点吗

Example: A B and C need to be ran one-at-a-time. All other classes will be denoted by numbers. 
 Threads running at one time:    
    A 3 7 2 - A would run while 3 other classes run
    C 8 4 1 - B would run once A is done, (other threads dont matter)
    B 5 9 6 - C would run once B is done.
关于更多信息,我有3-4个类,它们不能并行运行,因为它们所做的事情,我基本上只希望这些类一次运行一个,并且希望保证这些类中只有一个可以同时运行。我的所有其他类都可以在任何给定时间以任何顺序运行,没有任何问题

我知道我可以设置为与组级别并行,但是我必须向所有其他类添加随机的无意义组,以便它们同时运行。也许有一种方法可以将一个组中的一个线程与另一个组并行

我目前运行4个线程,有大约50个类

有什么想法吗

--根据评论增加要求/想法--

我尝试这样做的主要原因是我正在测试一个服务器API。有些调用在服务器端需要很长时间,因此在等待响应的同时,我还可以发送一些其他调用,从而实现多线程。我将所有测试都转换为多线程运行,以便在整个测试套件中节省大量时间。它工作得很好,但是有四个类不能同时抛出到服务器上,否则会导致测试失败。 注意:我知道一种方法是“修复这些类,使它们能够并行工作”,我已经尝试过,如果可能的话,还会继续尝试,但这是另一个更长的故事,让我们现在假设这是不可能的


因此,它几乎都是关于时间的。解决方案本质上是通过休眠我不感兴趣的所有其他线程来运行单线程,因为这会破坏整个目的。

您可以将它们都绑定到同一个cpu。这意味着它们当时无法运行


问题是,一次只运行一个计时器是远远不够的。相反,您应该在这些线程之间使用锁定,以便它们可以在已知的点上以您可以推断的方式移交执行。

经过多次艰苦的尝试,试图找到解决方法,我更清楚地阅读了TestNG规范,并找到了解决方案。其实很简单。
具有并行级别,
这让我想到了以下几点

<suite name="testSuite" parallel="tests" thread-count="4">
   <test name="foo" parallel="classes" thread-count="3">
     .. (classes you want to include)
   </test>
   <test name="bar">  <!-- this runs single threaded because there is no parallel tag>
     .. (classes you want to run single threaded)
   </test>
</suite>

.. (要包括的类)

绑定不起作用,因为假设我有2个内核和4个线程(或者超过4个线程),我仍然可以得到这样的情况:这些类是并行的,它们不会在cpu上并行,这不是唯一的问题。如果是这样的话,我会在热点上使用syncronize块。我不确定锁在不同的课堂上是如何工作的,但我愿意倾听。到目前为止,我所能想到的锁的问题是,我可能一次拥有所有四个类,如果我使用锁,那么3个线程除了等待unlock@Humdinger一个线程运行,三个线程不运行,这对我来说就是一次只运行一个线程。也许你可以重新表述你想要达到的目标。由于您的要求不明确,我不明白您为什么需要多个不并行运行的线程。我只有一个线程。从正常的角度来看,单线程是最好的选择。我在问题的末尾添加了一些信息,以澄清我到底在做什么,以及为什么我更喜欢多线程。对于不能同时使用的所有请求,我将使用一个共享锁。我假设您有其他请求,您可以发送额外的线程。因为你大部分时间都在等待服务器,所以大部分时间你甚至不会使用一个线程。-或者,我会创建一个列表数组,保存所有用户单击要执行的内容,然后在您从线程中出来并运行或不运行某些内容时,对该列表运行检查。您知道如何使用注释来执行此操作吗?我的所有测试都在@Test(groups={“group1})中。我有一些类,其中每个方法1乘1运行是正常的,还有另一个类,我希望所有测试都在每个类之后执行。如果您的xml答案是正确的,但是是在代码或注释中。