// 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 ( ) ;
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 ( ) ;
e.printStackTrace ( ) ;
}
}
}
}
}
SharedData sharedData = new SharedData( ) ;
ThreadOne t1 = new ThreadOne( sharedData) ;
ThreadTwo t2 = new ThreadTwo( sharedData) ;
t1.start ( ) ;
t2.start ( ) ;
// t1.join();
// t2.join();
}
}
Ly8gcGFja2FnZSBkZW1vOwoKaW1wb3J0IGphdmEudXRpbC5TY2FubmVyOwoKcHVibGljIGNsYXNzIE1haW4gewovLyAgICBwdWJsaWMgc3RhdGljIFNjYW5uZXIgc2Nhbm5lciA9IG5ldyBTY2FubmVyKFN5c3RlbS5pbik7CiAgICBzdGF0aWMgY2xhc3MgU2hhcmVkRGF0YXsKICAgICAgICBwdWJsaWMgYm9vbGVhbiBzaGFyZWQgPSBmYWxzZTsKICAgICAgICBwdWJsaWMgaW50IGEsYjsKICAgIH0KICAgIHN0YXRpYyBjbGFzcyBUaHJlYWRPbmUgZXh0ZW5kcyBUaHJlYWR7CiAgICAgICAgZmluYWwgU2hhcmVkRGF0YSBzaGFyZWREYXRhOwogICAgICAgIHB1YmxpYyBUaHJlYWRPbmUoU2hhcmVkRGF0YSBzaGFyZWREYXRhKXsKICAgICAgICAgICAgdGhpcy5zaGFyZWREYXRhID0gc2hhcmVkRGF0YTsKICAgICAgICB9CgogICAgICAgIEBPdmVycmlkZQogICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgICAgU2Nhbm5lciBzY2FubmVyID0gbmV3IFNjYW5uZXIoU3lzdGVtLmluKTsKICAgICAgICAgICAgd2hpbGUgKHRydWUpewogICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChzaGFyZWREYXRhKXsKICAgICAgICAgICAgICAgICAgICBpZihzaGFyZWREYXRhLnNoYXJlZCl7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWREYXRhLndhaXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJFbnRlciB0aGUgZmlyc3QgbnVtYmVyOiAiKTsKICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkRGF0YS5hID0gc2Nhbm5lci5uZXh0SW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkVudGVyIHRoZSBzZWNvbmQgbnVtYmVyOiAiKTsKICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkRGF0YS5iID0gc2Nhbm5lci5uZXh0SW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZERhdGEuc2hhcmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkRGF0YS5ub3RpZnkoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgc3RhdGljIGNsYXNzIFRocmVhZFR3byBleHRlbmRzIFRocmVhZHsKICAgICAgICBmaW5hbCBTaGFyZWREYXRhIHNoYXJlZERhdGE7CgogICAgICAgIHB1YmxpYyBUaHJlYWRUd28oU2hhcmVkRGF0YSBzaGFyZWREYXRhKXsKICAgICAgICAgICAgdGhpcy5zaGFyZWREYXRhID0gc2hhcmVkRGF0YTsKICAgICAgICB9CgogICAgICAgIEBPdmVycmlkZQogICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgICAgd2hpbGUodHJ1ZSl7CiAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHNoYXJlZERhdGEpewogICAgICAgICAgICAgICAgICAgIGlmKHNoYXJlZERhdGEuc2hhcmVkKXsKICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZGRpdGlvbiByZXN1bHQ6ICIgKyAoc2hhcmVkRGF0YS5hK3NoYXJlZERhdGEuYikpOwogICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWREYXRhLnNoYXJlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWREYXRhLm5vdGlmeSgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWREYXRhLndhaXQoKTsKICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIFNoYXJlZERhdGEgc2hhcmVkRGF0YSA9IG5ldyBTaGFyZWREYXRhKCk7CiAgICAgICAgICAgIFRocmVhZE9uZSB0MSA9IG5ldyBUaHJlYWRPbmUoc2hhcmVkRGF0YSk7CiAgICAgICAgICAgIFRocmVhZFR3byB0MiA9IG5ldyBUaHJlYWRUd28oc2hhcmVkRGF0YSk7CiAgICAgICAgICAgIHQxLnN0YXJ0KCk7CiAgICAgICAgICAgIHQyLnN0YXJ0KCk7Ci8vICAgICAgICAgICAgdDEuam9pbigpOwovLyAgICAgICAgICAgIHQyLmpvaW4oKTsKICAgIH0KfQo=