I assume that you say the "threads interrupt each other" you mean that the output from the two threads is interspersed. I also imagine that you are writing to System.err or System.out.
I believe what you are seeing is a consequence of two threads doing unsynchronized output to the same stream. In Eclipse, the stream you are writing to has sufficient buffering that a call to write() will not stall (99.9% of the time). By contrast, when you run from the command line, it is quite possible that each Java write() call is resulting in a write system call, stalling one thread and scheduling the other one. Indeed, it is even possible that a Java write() may turn into multiple write system calls!
The simple answer would be to try and change the buffering for your stream. Unfortunately, I don't think that the Java APIs allow you to do this for the console standard output/error streams.
Other imperfect answers include:
Change your application to synchronize all of your writes on the System.out/err object. Unfortunately, this is liable to mask synchronization bugs in the code you are trying to test!!
Change your application to output to a ByteArrayOutputStream(). This will reduce the change of "interruption", but it could still occasionally happen, unless you synchronize.
The best answer I can think of is to create a wrapper Stream / Reader class that synchronizes writes to a ByteArrayOutputStream, write all the messages to an instance, then dump the lot to System.out (or wherever) when the test is done. This could mask synchronization bugs, but it is far less likely than if you synchronized on the System.out/err objects.