I personally don't like the idea of having protected non-final fields.

Why is this non-final to begin with? Could lookForStuckThread() return a copy of the original?