package org.apache.logging.log4j.message;
import org.apache.logging.log4j.util.Chars;
import org.apache.logging.log4j.util.StringBuilders;
class BasicThreadInformation implements ThreadInformation {
private static final int HASH_SHIFT = 32;
private static final int HASH_MULTIPLIER = 31;
private final long id;
private final String name;
private final String longName;
private final Thread.State state;
private final int priority;
private final boolean isAlive;
private final boolean isDaemon;
private final String threadGroupName;
BasicThreadInformation(final Thread thread) {
this.id = thread.getId();
this.name = thread.getName();
this.longName = thread.toString();
this.state = thread.getState();
this.priority = thread.getPriority();
this.isAlive = thread.isAlive();
this.isDaemon = thread.isDaemon();
final ThreadGroup group = thread.getThreadGroup();
threadGroupName = group == null ? null : group.getName();
}
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
final BasicThreadInformation that = (BasicThreadInformation) o;
if (id != that.id) {
return false;
}
if (name != null ? !name.equals(that.name) : that.name != null) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result = (int) (id ^ (id >>> HASH_SHIFT));
result = HASH_MULTIPLIER * result + (name != null ? name.hashCode() : 0);
return result;
}
@Override
public void printThreadInfo(final StringBuilder sb) {
StringBuilders.appendDqValue(sb, name).append(Chars.SPACE);
if (isDaemon) {
sb.append("daemon ");
}
sb.append("prio=").append(priority).append(" tid=").append(id).append(' ');
if (threadGroupName != null) {
StringBuilders.appendKeyDqValue(sb, "group", threadGroupName);
}
sb.append('\n');
sb.append("\tThread state: ").append(state.name()).append('\n');
}
@Override
public void printStack(final StringBuilder sb, final StackTraceElement[] trace) {
for (final StackTraceElement element : trace) {
sb.append("\tat ").append(element).append('\n');
}
}
}