java - 关于线程和 JVisualVM

标签 java multithreading performance visualvm jvisualvm

我正在 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 中的线程 Activity 。我原本希望看到两个线程同时呈绿色(即同时运行),但是我看到在执行过程中的任何时间点,有一小会儿任何一个线程都处于监视器状态,而另一个线程正在执行。过了一会儿,它们切换了(前者正在执行,后者处于Monitor状态)。怎么会这样?

最佳答案

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

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

关于java - 关于线程和 JVisualVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27582486/

相关文章:

java.lang.Double 不支持 Realm 对象

java - 泛型 <? super >通配符

java - 并发还是顺序?

c++ - 生产者和消费者——多线程

c# - 使用 'is' 关键字的局部变量声明 VS 'as' 关键字的性能差异

java - 使用 jsp :param/c:param in a Portlet Environment

java - %20 的 ImagePath 不起作用

Java多线程线程随机终止

javascript - 减少http请求应该先做什么?

javascript - ('img' ).load 不起作用 (jQuery) 是否有原因?