Я хотел бы спросить, есть ли простой способ определить использование процессора в потоке в java. Благодаря
Мониторинг использования процессора в потоке в java?
Ответ 1
Я верю JConsole (заархивированная ссылка) предоставляет такую информацию через плагин
 
Он использует ThreadMXBean функцию getThreadCpuTime().
Что-то по линии:
        long upTime = runtimeProxy.getUptime();
        List<Long> threadCpuTime = new ArrayList<Long>();
        for (int i = 0; i < threadIds.size(); i++) {
            long threadId = threadIds.get(i);
            if (threadId != -1) {
                threadCpuTime.add(threadProxy.getThreadCpuTime(threadId));
            } else {
                threadCpuTime.add(0L);
            }
        }
        int nCPUs = osProxy.getAvailableProcessors();
        List<Float> cpuUsageList = new ArrayList<Float>();
        if (prevUpTime > 0L && upTime > prevUpTime) {
            // elapsedTime is in ms
            long elapsedTime = upTime - prevUpTime;
            for (int i = 0; i < threadIds.size(); i++) {
                // elapsedCpu is in ns
                long elapsedCpu = threadCpuTime.get(i) - prevThreadCpuTime.get(i);
                // cpuUsage could go higher than 100% because elapsedTime
                // and elapsedCpu are not fetched simultaneously. Limit to
                // 99% to avoid Chart showing a scale from 0% to 200%.
                float cpuUsage = Math.min(99F, elapsedCpu / (elapsedTime * 1000000F * nCPUs));
                cpuUsageList.add(cpuUsage);
            }
        }
		Ответ 2
используя java.lang.management.ThreadMXBean. Как получить ThreadMXBean:
 ThreadMXBean tmxb = ManagementFactory.getThreadMXBean();
тогда вы можете запросить, сколько конкретного потока потребляет, используя:
 long cpuTime = tmxb.getThreadCpuTime(aThreadID);
Надеюсь, что это поможет.
Ответ 3
Option_1: уровень кода
В коде бизнес-логики; в начале вызова start() API и в конце блокировки вызова stop(). Так что вы получите процессорное время для выполнения вашей логики текущим потоком. Затем запишите его. Ссылка.
class CPUTimer 
{
    private long _startTime = 0l;
    public void start ()
    {
        _startTime = getCpuTimeInMillis();
    }
    public long stop ()
    {
        long result = (getCpuTimeInMillis() - _startTime);
        _startTime = 0l;
        return result;
    }
    public boolean isRunning ()
    {
        return _startTime != 0l;
    }
    /** thread CPU time in milliseconds. */
    private long getCpuTimeInMillis ()
    {
        ThreadMXBean bean = ManagementFactory.getThreadMXBean();
        return bean.isCurrentThreadCpuTimeSupported() ? bean.getCurrentThreadCpuTime()/1000000: 0L;
    }
}
Option_2: уровень монитора с помощью плагинов (ящик IBM AIX, у которого нет поддержки jvisualvm)
Если вы считаете, что это задержка с добавлением кода сейчас, вы можете предпочесть JConsole с поддержкой плагинов. Я последовал за этой статьей. Загрузите банку topthreads из этой статьи и запустите ./jconsole -pluginpath topthreads-1.1.jar
Option_3: уровень монитора с использованием TOP (shift H) + JSTACK (машина Unix с поддержкой Shif + H)
Следуйте этому учебнику, где верхняя команда даст возможность найти верхний поток CPU (nid). Возьмите ту проверку, что nid в выходном файле jstack.
Ответ 4
Попробуйте подключиться к плагину "TopThreads" JConsole. См. http://lsd.luminis.nl/top-threads-plugin-for-jconsole/
Ответ 5
Хотя это зависит от платформы, я считаю, что вы ищете ThreadMXBean: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/ThreadMXBean.html. Например, вы можете использовать метод getThreadUserTime, чтобы получить то, что вам нужно. Чтобы проверить, поддерживает ли ваша платформа измерение ЦП, вы можете вызвать isThreadCpuTimeSupported().
Ответ 6
В действительности объект ThreadMXBean предоставляет необходимые вам функции (однако он не может быть реализован на всех виртуальных машинах).
В JDK 1.5 была демонстрационная программа, выполняющая именно то, что вам нужно. Это было в папке demo/management, и она называлась JTop.java
К сожалению, его нет в Java6. Возможно, вы можете найти в Google или скачать JDK5.