Search code examples
multithreadingintellij-idea

Thread count is different when debugging or running on IntelliJ


I am using the following code :-

public static void main(String[] args) {
        int threadPool = 4;
        System.out.println("initial count---" + Thread.activeCount());
        Thread.currentThread();
}

The output is different While debugging on IntelliJ :- initial count---1

While running on IntelliJ :- initial count---2

I am not able to understand what is the extra thread when I run this program.


Solution

  • There is one extra thread made by IntelliJ when running it:

    "Monitor Ctrl-Break" 
           java.lang.Thread.State: RUNNABLE
                at java.net.DualStackPlainSocketImpl.accept0(Native Method)
                at java.net.DualStackPlainSocketImpl.socketAccept(DualStackPlainSocketImpl.java:131)
                at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398)
                at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:199)
                at java.net.ServerSocket.implAccept(ServerSocket.java:530)
                at java.net.ServerSocket.accept(ServerSocket.java:498)
                at com.intellij.rt.execution.application.AppMain$1.run(AppMain.java:90)
                at java.lang.Thread.run(Thread.java:745)
    

    You could print them by using:

    /** from http://crunchify.com/how-to-generate-java-thread-dump-programmatically/ */
    public static String crunchifyGenerateThreadDump() {
        final StringBuilder dump = new StringBuilder();
        final ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
        final ThreadInfo[] threadInfos = threadMXBean.getThreadInfo(threadMXBean.getAllThreadIds(), 100);
        for (ThreadInfo threadInfo : threadInfos) {
            dump.append('"');
            dump.append(threadInfo.getThreadName());
            dump.append("\" ");
            final Thread.State state = threadInfo.getThreadState();
            dump.append("\n   java.lang.Thread.State: ");
            dump.append(state);
            final StackTraceElement[] stackTraceElements = threadInfo.getStackTrace();
            for (final StackTraceElement stackTraceElement : stackTraceElements) {
                dump.append("\n        at ");
                dump.append(stackTraceElement);
            }
            dump.append("\n\n");
        }
        return dump.toString();
    }