Java 获取当前线程的逻辑核心-测量分布式应用程序的性能

Java 获取当前线程的逻辑核心-测量分布式应用程序的性能,java,multithreading,cpu,concurrent-programming,Java,Multithreading,Cpu,Concurrent Programming,我正在构建一个在本地运行的本地分布式程序。我的计算机有多个内核,所以我的假设是我可以实现多个线程的真正并行 Java中是否有任何方法可以检查哪些逻辑核运行当前线程,以便检查我是否具有真正的并行性 任何指示和提示都会被高度重视 我不确定您想要查看的信息是否能帮助您确保实现“真正的”并行性 考虑以下代码: public class MyClass { public synchronized void method1() { try { Thread.

我正在构建一个在本地运行的本地分布式程序。我的计算机有多个内核,所以我的假设是我可以实现多个线程的真正并行

Java中是否有任何方法可以检查哪些逻辑核运行当前线程,以便检查我是否具有真正的并行性


任何指示和提示都会被高度重视

我不确定您想要查看的信息是否能帮助您确保实现“真正的”并行性

考虑以下代码:

public class MyClass {

    public synchronized void method1() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args) throws InterruptedException {
        Thread.sleep(10000);
        MyClass c = new MyClass();
        new Thread(() -> c.method1()).start();
        new Thread(() -> c.method1()).start();
        new Thread(() -> c.method1()).start();
        new Thread(() -> c.method1()).start();
    }
}
每个线程都可以在不同的内核上运行,method1()的4个执行仍然是连续的

为了确保您能从并行性中获益,我宁愿对程序进行cpu采样分析(使用您喜欢的工具。如果您不知道,jdk中包含的jvisualvm是一个很好的开始)

对于上面的简单程序,jvisualvm将向您展示:

当线程的颜色不是绿色时,表示它被程序中的其他内容阻止

这里的模式很简单。在现实世界中,您可能需要进行cpu采样,以查看最慢的方法是什么,以及它们在哪里花费时间