Недавно я наткнулся на источники АВТ-х EventQueue
где я видел этот кусок кода:Как сравнить нить объекты
final boolean isDispatchThreadImpl() {
EventQueue eq = this;
pushPopLock.lock();
try {
EventQueue next = eq.nextQueue;
while (next != null) {
eq = next;
next = eq.nextQueue;
}
if (eq.fwDispatcher != null) {
return eq.fwDispatcher.isDispatchThread();
}
return (Thread.currentThread() == eq.dispatchThread);
} finally {
pushPopLock.unlock();
}
}
Что на самом деле борется со мной в том, что объекты резьбы сравниваются с использованием ==
. До сих пор я делал это с equals(Object)
. Я уже посмотрел на this question, но два ответа на самом деле не то, что я ищу.
Возможно ли, что два разных экземпляра относятся к одному родному потоку? Как сравнить объекты нитей для равенства?
Хех, один из тех забавных ситуаций, когда * вопрос * действительно дубликат, но ответы там не дают ответа на поставленный вопрос. :-) –
Ключ к вашему вопросу заключается в том, будет ли 'Thread.currentThread() == eq.dispatchThread' когда-либо давать вам другой результат, чем' Thread.currentThread(). Equals (eq.dispatchThread) '.И ответ - нет, он никогда не будет, потому что ['Thread.currentThread'] (http://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#currentThread--) будет никогда не возвращайте 'null' и' Thread' наследует 'equals' от' Object' и ['Object # equals'] (http://docs.oracle.com/javase/8/docs/api/java/lang/Object .html # equals-java.lang.Object-) делает '=='. –
@ T.J.Crowder Я думал то же самое! ;) – beatngu13