Thread.getId() global uniqueness question

Ben S picture Ben S · Feb 26, 2009 · Viewed 8.1k times · Source

If multiple Java applications are running on a system, is each Thread ID unique relative to all other Java threads, regardless of what application they are running in?

Java applications are supposed to be sand-boxed relative to other Java applications so I thought it might be possible for Thread IDs to collide.

If the Thread IDs are unique across all applications, won't that leak some (although very minor) information about other applications on the system? Such as how many threads have started in other applications, or even if other Java applications are running at all?

Answer

Michael Myers picture Michael Myers · Feb 26, 2009

Well, let me check the source.

In the Thread's init method (which is called by every constructor):

/* Set thread ID */
tid = nextThreadID();

In nextThreadID():

private static synchronized long nextThreadID() {
    return ++threadSeqNumber;
}

And:

/* For generating thread ID */
private static long threadSeqNumber;

It is never set, and thus defaults to 0.

So apparently thread ID numbers always start at 0 and increment by 1. In other words, the answer to your question is that they are not globally unique.