// package demo;

import java.util.Scanner;

public class Main {
//    public static Scanner scanner = new Scanner(System.in);
    static class SharedData{
        public boolean shared = false;
        public int a,b;
    }
    static class ThreadOne extends Thread{
        final SharedData sharedData;
        public ThreadOne(SharedData sharedData){
            this.sharedData = sharedData;
        }

        @Override
        public void run() {
            Scanner scanner = new Scanner(System.in);
            while (true){
                synchronized (sharedData){
                    if(sharedData.shared){
                        try {
                            sharedData.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }else{
                        System.out.print("Enter the first number: ");
                        sharedData.a = scanner.nextInt();
                        System.out.print("Enter the second number: ");
                        sharedData.b = scanner.nextInt();
                        sharedData.shared = true;
                        sharedData.notify();
                    }
                }
            }
        }
    }

    static class ThreadTwo extends Thread{
        final SharedData sharedData;

        public ThreadTwo(SharedData sharedData){
            this.sharedData = sharedData;
        }

        @Override
        public void run() {
            while(true){
                synchronized (sharedData){
                    if(sharedData.shared){
                        System.out.println("Addition result: " + (sharedData.a+sharedData.b));
                        sharedData.shared = false;
                        sharedData.notify();
                    }
                    try {
                        sharedData.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {
            SharedData sharedData = new SharedData();
            ThreadOne t1 = new ThreadOne(sharedData);
            ThreadTwo t2 = new ThreadTwo(sharedData);
            t1.start();
            t2.start();
//            t1.join();
//            t2.join();
    }
}
