The Lucee debugging log reports Implicit Variable Access when I do cfthread["threadname"] after a join.
There is no such thing as thread.cfthread, so what are you expecting us to type so that UndefinedImpl.java is not triggered?
It seems like this is an inconsistency or bug with the implicit checker since I don't think I can "fix" this in CFML code alone.
It looks simple to fix by preventing this line from running UndefinedImpl.java below pc.getThreadScope:
if (debug) debugCascadedAccess(pc, "thread", key);
It is probably better performance to do it there then have a true top level scope everywhere.
I made a commit with my suggested solution.