gcj still doesn't work because, for some reason I don't yet understand, backtraces are broken. When backtrace is called from a thread, it wanders off the end of the stack and segfaults. This doesn't happen with F13.
When I find out what's broken it, I'll let you know.
To compile the example, use
gcc thread.c -lpthread -fexceptions
Andrew.