【问题标题】:Regarding Threads and JVisualVM关于线程和 JVisualVM
【发布时间】:2014-12-20 17:15:06
【问题描述】:

我在 Java 中运行以下程序(通过 Eclipse IDE):

package threaddemo;

class Runner extends Thread{

    @Override
    public void run() {

        while(true)
        System.out.println("Running in a thread ....");
    }

}

public class ThreadClass {

    public static void main(String[] args) {

        Runner thread1 = new Runner();
        thread1.start();

        Runner thread2 = new Runner();
        thread2.start();

    }

}

当程序运行时,我试图查看 JVisualVM 中的线程活动。我希望同时看到两个线程都是绿色的(即同时运行),但是我看到在执行期间的任何时间点,有一段时间任何一个线程处于 Monitor 状态,而另一个正在执行。过了一会儿,它们切换(前者正在执行,而后者处于Monitor状态)。这怎么可能?

【问题讨论】:

    标签: java multithreading performance visualvm jvisualvm


    【解决方案1】:

    您的两个线程都在尝试写入 System.out。从writing to PrintStream is synchronized 开始,每次您的一个线程正在写入流,而另一个线程正在等待流可用。

    如果线程执行一些不依赖于共享资源的活动(例如,一些计算),您将能够看到线程同时执行。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-14
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多