import java.util.Scanner ;
public class Main {
static class SharedData{
public int a,b;
//
//
// public int getA() {
// return a;
// }
//
// public void setA(int a) {
// this.a = a;
// }
//
// public int getB() {
// return b;
// }
//
// public void setB(int b) {
// this.b = 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) {
System .
out .
print ( "Enter the first number: " ) ; int t = scanner.nextInt ( ) ;
sharedData.a = t;
System .
out .
print ( "Enter the second number: " ) ; t = scanner.nextInt ( ) ;
sharedData.b = t;
try {
sharedData.wait ( ) ;
e.printStackTrace ( ) ;
}
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) {
try {
sharedData.wait ( ) ;
e.printStackTrace ( ) ;
}
System .
out .
println ( "Addition Result: " + ( sharedData.
a + sharedData.
b ) ) ; try {
e.printStackTrace ( ) ;
}
sharedData.notify ( ) ;
}
}
}
}
public static void main
( String [ ] args
) { SharedData sharedData = new SharedData( ) ;
ThreadOne t1 = new ThreadOne( sharedData) ;
ThreadTwo t2 = new ThreadTwo( sharedData) ;
t1.start ( ) ;
t2.start ( ) ;
}
}
CmltcG9ydCBqYXZhLnV0aWwuU2Nhbm5lcjsKCnB1YmxpYyBjbGFzcyBNYWluIHsKICAgIHN0YXRpYyBjbGFzcyBTaGFyZWREYXRhewogICAgICAgIHB1YmxpYyBpbnQgYSxiOwovLwovLwovLyAgICAgICAgcHVibGljIGludCBnZXRBKCkgewovLyAgICAgICAgICAgIHJldHVybiBhOwovLyAgICAgICAgfQovLwovLyAgICAgICAgcHVibGljIHZvaWQgc2V0QShpbnQgYSkgewovLyAgICAgICAgICAgIHRoaXMuYSA9IGE7Ci8vICAgICAgICB9Ci8vCi8vICAgICAgICBwdWJsaWMgaW50IGdldEIoKSB7Ci8vICAgICAgICAgICAgcmV0dXJuIGI7Ci8vICAgICAgICB9Ci8vCi8vICAgICAgICBwdWJsaWMgdm9pZCBzZXRCKGludCBiKSB7Ci8vICAgICAgICAgICAgdGhpcy5iID0gYjsKLy8gICAgICAgIH0KICAgIH0KICAgIHN0YXRpYyBjbGFzcyBUaHJlYWRPbmUgZXh0ZW5kcyBUaHJlYWR7CiAgICAgICAgZmluYWwgU2hhcmVkRGF0YSBzaGFyZWREYXRhOwogICAgICAgIHB1YmxpYyBUaHJlYWRPbmUoU2hhcmVkRGF0YSBzaGFyZWREYXRhKXsKICAgICAgICAgICAgdGhpcy5zaGFyZWREYXRhID0gc2hhcmVkRGF0YTsKICAgICAgICB9CgogICAgICAgIEBPdmVycmlkZQogICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgICAgU2Nhbm5lciBzY2FubmVyID0gbmV3IFNjYW5uZXIoU3lzdGVtLmluKTsKICAgICAgICAgICAgd2hpbGUgKHRydWUpewogICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChzaGFyZWREYXRhKXsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJFbnRlciB0aGUgZmlyc3QgbnVtYmVyOiAiKTsKICAgICAgICAgICAgICAgICAgICBpbnQgdCA9IHNjYW5uZXIubmV4dEludCgpOwogICAgICAgICAgICAgICAgICAgIHNoYXJlZERhdGEuYT10OwogICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkVudGVyIHRoZSBzZWNvbmQgbnVtYmVyOiAiKTsKICAgICAgICAgICAgICAgICAgICB0ID0gc2Nhbm5lci5uZXh0SW50KCk7CiAgICAgICAgICAgICAgICAgICAgc2hhcmVkRGF0YS5iPXQ7CiAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkRGF0YS53YWl0KCk7CiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzaGFyZWREYXRhLm5vdGlmeSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHN0YXRpYyBjbGFzcyBUaHJlYWRUd28gZXh0ZW5kcyBUaHJlYWR7CiAgICAgICAgZmluYWwgU2hhcmVkRGF0YSBzaGFyZWREYXRhOwoKICAgICAgICBwdWJsaWMgVGhyZWFkVHdvKFNoYXJlZERhdGEgc2hhcmVkRGF0YSl7CiAgICAgICAgICAgIHRoaXMuc2hhcmVkRGF0YSA9IHNoYXJlZERhdGE7CiAgICAgICAgfQoKICAgICAgICBAT3ZlcnJpZGUKICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgICAgIHdoaWxlKHRydWUpewogICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChzaGFyZWREYXRhKXsKICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWREYXRhLndhaXQoKTsKCiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFkZGl0aW9uIFJlc3VsdDogIisoc2hhcmVkRGF0YS5hK3NoYXJlZERhdGEuYikpOwogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCg1MDAwKTsKICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHNoYXJlZERhdGEubm90aWZ5KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIFNoYXJlZERhdGEgc2hhcmVkRGF0YSA9IG5ldyBTaGFyZWREYXRhKCk7CiAgICAgICAgVGhyZWFkT25lIHQxID0gbmV3IFRocmVhZE9uZShzaGFyZWREYXRhKTsKICAgICAgICBUaHJlYWRUd28gdDIgPSBuZXcgVGhyZWFkVHdvKHNoYXJlZERhdGEpOwogICAgICAgIHQxLnN0YXJ0KCk7CiAgICAgICAgdDIuc3RhcnQoKTsKICAgIH0KfQo=