/** * Create data transfer object for given lock info. * * @param li Lock info. */ public VisorThreadLockInfo(LockInfo li) { assert li != null; clsName = li.getClassName(); identityHashCode = li.getIdentityHashCode(); }
sb.append("Number of Locked Synchronizers: ").append(lockInfos.length); for (final LockInfo lockInfo : lockInfos) { sb.append("\n\t- ").append(lockInfo.toString());
public static long getMonitorOwner(Object obj) { if (Thread.holdsLock(obj)) return Thread.currentThread().getId(); for (java.lang.management.ThreadInfo ti : java.lang.management.ManagementFactory.getThreadMXBean() .dumpAllThreads(true, false)) { for (java.lang.management.MonitorInfo mi : ti.getLockedMonitors()) { if (mi.getIdentityHashCode() == System.identityHashCode(obj)) { return ti.getThreadId(); } } } return 0; }
public static boolean isLockedByThread(Object value) { if (value == null) return false; int objectHash = value.hashCode(); for (long threadId : tmxb.getAllThreadIds()) { ThreadInfo info = tmxb.getThreadInfo(threadId); for (LockInfo locks : info.getLockedSynchronizers()) if (locks.getIdentityHashCode() == objectHash) return true; } return false; }
private LinkedHashMap<String, Object> asJSON(LockInfo lockInfo) { LinkedHashMap<String, Object> lockedOn = new LinkedHashMap<>(); if (lockInfo != null) { lockedOn.put("Class", lockInfo.getClassName()); lockedOn.put("IdentityHashCode", lockInfo.getIdentityHashCode()); } return lockedOn; }
sb.append("Number of Locked Synchronizers: ").append(lockInfos.length); for (final LockInfo lockInfo : lockInfos) { sb.append("\n\t- ").append(lockInfo.toString());
private void printLock( StringBuilder sb, LockInfo lock ) { sb.append('<').append(Integer.toHexString(lock.getIdentityHashCode())).append("> (a ").append(lock.getClassName()).append(')'); }
private void printLockedOwnableSynchronizers(Appendable a, ThreadInfo ti) throws IOException { a.append(" Locked ownable synchronizers:").append("\n"); final LockInfo lockedSynchronizers[] = ti.getLockedSynchronizers(); if (lockedSynchronizers != null && lockedSynchronizers.length > 0) { for (LockInfo li : lockedSynchronizers) { a.append("\t").append("- ").append(li.toString()).append("\n"); } } else { a.append("\t").append("- None").append("\n"); } }
private void printLock( StringBuilder sb, LockInfo lock ) { sb.append('<').append(Integer.toHexString(lock.getIdentityHashCode())).append("> (a ").append(lock.getClassName()).append(')'); }
LockInfo lockInf = ti.getLockInfo(); if (lockInf != null) { String key = lockInf.toString(); Integer cnt = blockCounts.get(key); blockCounts.put(key, cnt == null ? 1 : cnt+1);
private void printLock( StringBuilder sb, LockInfo lock ) { sb.append('<').append(Integer.toHexString(lock.getIdentityHashCode())).append("> (a ").append(lock.getClassName()).append(')'); }
sb.append("Locked thread [" + thread.getId() + "] " + threadInfo.getThreadName() + " on " + threadInfo.getLockInfo().toString() + ", locked synchronizers: " + Arrays.toString(threadInfo.getLockedSynchronizers()) +
private void printLock( StringBuilder sb, LockInfo lock ) { sb.append('<').append(Integer.toHexString(lock.getIdentityHashCode())).append("> (a ").append(lock.getClassName()).append(')'); }
sb.append("Number of Locked Synchronizers: ").append(lockInfos.length); for (final LockInfo lockInfo : lockInfos) { sb.append("\n\t- ").append(lockInfo.toString());
private void printLock( StringBuilder sb, LockInfo lock ) { sb.append('<').append(Integer.toHexString(lock.getIdentityHashCode())).append("> (a ").append(lock.getClassName()).append(')'); }
sb.append("Number of Locked Synchronizers: ").append(lockInfos.length); for (final LockInfo lockInfo : lockInfos) { sb.append("\n\t- ").append(lockInfo.toString());
public LocalLockInfo(Serializable locatility, LockInfo sync) { super(); this.locatility = locatility; // LockInfo and Monitor info aren't serializable, so copy the information from // them. For backwards compatibility, use the LI class which is used // in older versions of gemfire. if (sync instanceof MonitorInfo) { this.info = new LI(sync.getClassName(), sync.getIdentityHashCode(), ((MonitorInfo) sync).getLockedStackFrame()); } else { this.info = new LI(sync.getClassName(), sync.getIdentityHashCode()); } }
sb.append("Number of Locked Synchronizers: ").append(lockInfos.length); for (final LockInfo lockInfo : lockInfos) { sb.append("\n\t- ").append(lockInfo.toString());
private String generateThreadStack(ThreadInfo info) { // This is annoying, but the to string method on info sucks. StringBuilder result = new StringBuilder(); result.append(info.getThreadName()).append(" ID=0x") .append(Long.toHexString(info.getThreadId())).append("(").append(info.getThreadId()) .append(") state=").append(info.getThreadState()); if (info.getLockInfo() != null) { result.append("\n\twaiting to lock <" + info.getLockInfo() + ">"); } for (StackTraceElement element : info.getStackTrace()) { result.append("\n\tat " + element); for (MonitorInfo monitor : info.getLockedMonitors()) { if (element.equals(monitor.getLockedStackFrame())) { result.append("\n\tlocked <" + monitor + ">"); } } } if (info.getLockedSynchronizers().length > 0) { result.append("\nLocked synchronizers:"); for (LockInfo sync : info.getLockedSynchronizers()) { result.append( "\n" + sync.getClassName() + "@" + Integer.toHexString(sync.getIdentityHashCode())); } } return result.toString(); }
.append(threadInfo.getThreadName()) .append(" on ") .append(threadInfo.getLockInfo().toString()) .append(", locked synchronizes: ") .append(Arrays.toString(threadInfo.getLockedSynchronizers()))