I know that the getName()
function on the main thread will return the String main
, but this can be changed with setName()
.
Is there any way to always determine the main thread of an application?
I know that the getName()
function on the main thread will return the String main
, but this can be changed with setName()
.
Is there any way to always determine the main thread of an application?
It seems that the main thread has an id of
1
as indicated byThread.getId()
:I'm not sure if it is part of the specification or an implementation-specific feature.
A more portable way is this:
with the caveat that
mainThreadId
has to be either in a class that is loaded by the main thread (e.g. the class containing themain
method). For instance, this doesn't work:From your question and your responses to comments I would suggest the following 2 approaches:
Place all requests to an event queue and main thread will take the requests from request queue to call the method you are talking about. In this case there must be a contract that any other method wanting to access the method you are talking about can do it only via the event queue (same idea as EDT).
Place an extra parameter in the method that you want to be called by main only to act as a token.Inside the method check if the token is correct (only
main
will have it/know it).If it is correct then proceed.Otherwise return false. Of course if you are allowed to make such a modificationOne possibility is to call
Thread.currentThread()
at the start ofmain()
, and hold on to the reference.