private ThreadDumpBo readThreadDumpBo(final Buffer buffer) {
        final String threadName = buffer.readPrefixedString();
        final long threadId = buffer.readLong();
        final long blockedTime = buffer.readLong();
        final long blockedCount = buffer.readLong();
        final long waitedTime = buffer.readLong();
        final long waitedCount = buffer.readLong();
        final String lockName = buffer.readPrefixedString();
        final long lockOwnerId = buffer.readLong();
        final String lockOwnerName = buffer.readPrefixedString();
        final boolean inNative = buffer.readBoolean();
        final boolean suspended = buffer.readBoolean();
        final int threadStateValue = buffer.readInt();

        final int stackTraceListSize = buffer.readVInt();
        final List<String> stackTraceList = new ArrayList<>(stackTraceListSize);
        if (stackTraceListSize > 0) {
            for (int i = 0; i < stackTraceListSize; i++) {
                final String string = buffer.readPrefixedString();
                stackTraceList.add(string);
            }
        }

        final int lockedMonitorListSize = buffer.readVInt();
        final List<MonitorInfoBo> monitorInfoBoList = new ArrayList<>(lockedMonitorListSize);
        if (lockedMonitorListSize > 0) {
            for (int i = 0; i < lockedMonitorListSize; i++) {
                final MonitorInfoBo monitorInfoBo = readMonitorInfoBo(buffer);
                monitorInfoBoList.add(monitorInfoBo);
            }
        }

        final int lockedSynchronizerListSize = buffer.readVInt();
        final List<String> lockedSynchronizerList = new ArrayList<>(lockedSynchronizerListSize);
        if (lockedSynchronizerListSize > 0) {
            for (int i = 0; i < lockedSynchronizerListSize; i++) {
                final String string = buffer.readPrefixedString();
                lockedSynchronizerList.add(string);
            }
        }

        final ThreadDumpBo threadDumpBo = new ThreadDumpBo();
        threadDumpBo.setThreadName(threadName);
        threadDumpBo.setThreadId(threadId);
        threadDumpBo.setBlockedTime(blockedTime);
        threadDumpBo.setBlockedCount(blockedCount);
        threadDumpBo.setWaitedTime(waitedTime);
        threadDumpBo.setWaitedCount(waitedCount);
        threadDumpBo.setLockName(lockName);
        threadDumpBo.setLockOwnerId(lockOwnerId);
        threadDumpBo.setLockOwnerName(lockOwnerName);
        threadDumpBo.setInNative(inNative);
        threadDumpBo.setSuspended(suspended);
        threadDumpBo.setThreadState(ThreadState.findByValue(threadStateValue));
        threadDumpBo.setStackTraceList(stackTraceList);
        threadDumpBo.setLockedMonitorInfoList(monitorInfoBoList);
        threadDumpBo.setLockedSynchronizerList(lockedSynchronizerList);

        return threadDumpBo;
    }
@author jaehong.kim
AgentEventBo.version is 1
commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/AgentEventMessageDeserializerV1.java