The documentation for @Test.singleThreaded says this:
If set to true, all the methods on this test class are guaranteed to run in the same thread,
even if the tests are currently being run with parallel="true". This attribute can only be
used at the class level and will be ignored if used at the method level.
If @Test.dependsOnMethods is set on a method in a class with @Test.singleThreaded=true, methods may be run in different threads.