I need a line by line explanation (using comments in the code itself) of the below Java program. I want to know what each line of code is doing / its purpose. The application itself deals with concurrency and has two threads. One thread counts from 0 to 20 and then the other thread counts down from 20 to 0.  Please and thank you Java source code:  package application; public class JavaConcurrency {     private static final Object lock = new Object();     private static boolean isCountingUpDone = false;          public static void main(String[] args) {         Runnable countUp = () -> {             for(int i = 0; i <= 20; i++) {                 synchronized (lock) {                     System.out.println("Thread 1: " + i);                     if (i == 20) {                         isCountingUpDone = true;                         lock.notifyAll(); // Notify thread 2 to start counting down                         System.out.println("\nThread 1 complete\n");                     }                 }                 try {                     Thread.sleep(400); // Slow down thread                 }                  catch (InterruptedException e) {                     Thread.currentThread().interrupt();                 }             }         };                  Runnable countDown = () -> {             synchronized (lock) {                 while (!isCountingUpDone) {                     try {                         lock.wait(); // Wait for thread 1 to finish                     }                     catch (InterruptedException e) {                         Thread.currentThread().interrupt();                     }                 }             }                          for (int i = 20; i >= 0; i--) {                 System.out.println("thread 2: " + i);                 try {                     Thread.sleep(400); // Slow down thread                 }                 catch (InterruptedException e) {                     Thread.currentThread().interrupt();                 }             }             System.out.println("\nThread 2 complete");         };              new Thread(countUp).start();         new Thread(countDown).start();     } }

Database System Concepts
7th Edition
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Chapter1: Introduction
Section: Chapter Questions
Problem 1PE
icon
Related questions
Question

I need a line by line explanation (using comments in the code itself) of the below Java program. I want to know what each line of code is doing / its purpose. The application itself deals with concurrency and has two threads. One thread counts from 0 to 20 and then the other thread counts down from 20 to 0. 

Please and thank you

Java source code: 

package application;

public class JavaConcurrency {

    private static final Object lock = new Object();
    private static boolean isCountingUpDone = false;
    
    public static void main(String[] args) {
        Runnable countUp = () -> {
            for(int i = 0; i <= 20; i++) {
                synchronized (lock) {
                    System.out.println("Thread 1: " + i);
                    if (i == 20) {
                        isCountingUpDone = true;
                        lock.notifyAll(); // Notify thread 2 to start counting down
                        System.out.println("\nThread 1 complete\n");
                    }
                }
                try {
                    Thread.sleep(400); // Slow down thread
                } 
                catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        };
        
        Runnable countDown = () -> {
            synchronized (lock) {
                while (!isCountingUpDone) {
                    try {
                        lock.wait(); // Wait for thread 1 to finish
                    }
                    catch (InterruptedException e) {
                        Thread.currentThread().interrupt();
                    }
                }
            }
            
            for (int i = 20; i >= 0; i--) {
                System.out.println("thread 2: " + i);
                try {
                    Thread.sleep(400); // Slow down thread
                }
                catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
            System.out.println("\nThread 2 complete");
        };
    
        new Thread(countUp).start();
        new Thread(countDown).start();
    }
}

 

Expert Solution
steps

Step by step

Solved in 3 steps with 1 images

Blurred answer
Knowledge Booster
Running Threads
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
Database System Concepts
Database System Concepts
Computer Science
ISBN:
9780078022159
Author:
Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:
McGraw-Hill Education
Starting Out with Python (4th Edition)
Starting Out with Python (4th Edition)
Computer Science
ISBN:
9780134444321
Author:
Tony Gaddis
Publisher:
PEARSON
Digital Fundamentals (11th Edition)
Digital Fundamentals (11th Edition)
Computer Science
ISBN:
9780132737968
Author:
Thomas L. Floyd
Publisher:
PEARSON
C How to Program (8th Edition)
C How to Program (8th Edition)
Computer Science
ISBN:
9780133976892
Author:
Paul J. Deitel, Harvey Deitel
Publisher:
PEARSON
Database Systems: Design, Implementation, & Manag…
Database Systems: Design, Implementation, & Manag…
Computer Science
ISBN:
9781337627900
Author:
Carlos Coronel, Steven Morris
Publisher:
Cengage Learning
Programmable Logic Controllers
Programmable Logic Controllers
Computer Science
ISBN:
9780073373843
Author:
Frank D. Petruzella
Publisher:
McGraw-Hill Education