PrimeNumberSeeker.java - Multi-Thread Sample Program

This section provides a simple multi-thread Java application, PrimeNumberSeeker.java, which will be used to learn how to debug multi-thread applications.

To help me practice debugging commands, I wrote the following simple multi-thread application, PrimeNumberSeeker.java:

/* PrimeNumberSeeker.java
#- Copyright (c) 2015, HerongYang.com, All Rights Reserved.
 */
public class PrimeNumberSeeker extends Thread {
   private static final int ceiling = 100;
   private static final int interval = 1000;
   private static final int delay = 100;
   public int count = 0;
   public int current = 2;
   public int[] primes = null;
   public static void main(String[] a) {
      System.out.println("Period, Current int, # primes");
      PrimeNumberSeeker t = new PrimeNumberSeeker();
      t.start();
      int i = 0;
      while (true) {
         i++;
         System.out.println( i+", "+t.current+", "+t.count);
         try {
            sleep(interval);
         } catch (InterruptedException e) {
            System.out.println("Monitor interrupted.");
         }
      }
   }
   public void run() {
      primes = new int[ceiling];
      while (count < ceiling) {
         current++;
         int j = 2;
         boolean isPrime = true;
         while (j<current/2 && isPrime) {
            isPrime = current % j > 0;
            j++;
         }
         if (isPrime) {
            count++;
            primes[count-1] = current;
         }
         try {
            sleep(delay);
         } catch (InterruptedException e) {
            System.out.println("Runner interrupted.");
         }
      }
   }
}

Note that:

Here is how I compiled the application and executed without debugging:

C:\herong>javac -g PrimeNumberSeeker.java

C:\herong>java PrimeNumberSeeker
Period, Current int, # primes
1, 2, 0
2, 12, 5
3, 22, 8
4, 32, 11
5, 42, 13
6, 52, 15
7, 62, 18
8, 72, 20
9, 82, 22
10, 92, 24
11, 102, 26
12, 112, 29
13, 122, 30
...
53, 521, 98
54, 531, 99
55, 541, 100
56, 541, 100
57, 541, 100
...

The output seems to be fine. But I want to use "jdb" to exam the calculation and to practice the debugging commands. I will show my debugging session in multiple parts with my comments in sections below.

Last update: 2015.

Table of Contents

 About This Book

 Java Tools Terminology

 Installing Java 8 on Windows

 'javac' - The Java Program Compiler

 'java' - The Java Program Launcher

'jdb' - The Java Debugger

 'jdb' - Java Debugger Command and Options

 Starting a Debugging Session with 'jdb'

 Debugging Applications with Separate 'jdb' Sessions

 Debugging Java Applications Remotely

 Listing Debugging Commands with 'help' Command

PrimeNumberSeeker.java - Multi-Thread Sample Program

 Starting Debugging Session on a Multi-Thread Application

 Stepping through Statements of a Child Thread

 Checking Variable Values in a Debugging Session

 Debugging the Main Thread of a Multi-Thread Application

 Switching Execution Threads in a Debugging Session

 Suspending Main Thread to Debug Child Thread

 'jconsole' - Java Monitoring and Management Console

 'jstat' - JVM Statistics Monitoring Tool

 JVM Troubleshooting Tools

 jvisualvm (Java VisualVM) - JVM Visual Tool

 'jar' - The JAR File Tool

 'javap' - The Java Class File Disassembler

 'keytool' - Public Key Certificate Tool

 'native2ascii' - Native-to-ASCII Encoding Converter

 Outdated Tutorials

 References

 PDF Printing Version