I'm not sure why the debugger is showing that, but creating new threads definitely works (it would be impossible to support things like Java concurrency without them).
Threads are created with unique ids, which can be queried with Thread.getId(). They can also be created with names, so you can name your new thread something like "MessageThread" (if no name is given, they are named "Thread-" plus the thread id). So I suggest printing out each thread's name and id to verify they're different. Here's a simple example:
class HelloThreads {
static void logThreadName() {
Thread t = Thread.currentThread();
System.out.println("thread name: " + t.getName() + " id: " + t.getId());
}
public static void main(String... args) throws Exception {
// Log the main thread.
logThreadName();
// Start a new thread and log it.
new Thread(new Runnable() {
public void run() {
logThreadName();
}
}, "MessageThread").start();
// Give MessageThread's logThreadName() time to run before exiting.
Thread.sleep(1);
}
}
To run on MacOS:
$ j2objc HelloThreads.java
$ j2objcc HelloThreads.m
$ ./a.out HelloThreads
thread name: main id: 1
thread name: MessageThread id: 3