/* package whatever; // don't place package name! */
public class Main {
public static void main
(String[] args
) { MySemaphore mySemaphore = new MySemaphore();
new Send(mySemaphore).start();
new Receive(mySemaphore).start();
}
}
class MySemaphore {
boolean flag = false;
flag = true;
notify();
}
while (!flag) {
wait();
}
flag = false;
}
}
MySemaphore mySemaphore;
public Send(MySemaphore semaphore) {
this.mySemaphore = semaphore;
}
@Override
public void run() {
int i = 0;
while (i++ < 10) {
try {
mySemaphore.take();
e.printStackTrace();
}
}
}
}
class Receive
extends Thread { MySemaphore mySemaphore;
public Receive(MySemaphore semaphore) {
this.mySemaphore = semaphore;
}
@Override
public void run() {
while (true) {
try {
mySemaphore.release();
e.printStackTrace();
}
System.
out.
println("receive"); }
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKcHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIE15U2VtYXBob3JlIG15U2VtYXBob3JlID0gbmV3IE15U2VtYXBob3JlKCk7CiAgICAgICAgbmV3IFNlbmQobXlTZW1hcGhvcmUpLnN0YXJ0KCk7CiAgICAgICAgbmV3IFJlY2VpdmUobXlTZW1hcGhvcmUpLnN0YXJ0KCk7CiAgICB9Cn0KCmNsYXNzIE15U2VtYXBob3JlIHsKICAgIGJvb2xlYW4gZmxhZyA9IGZhbHNlOwoKICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCB0YWtlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKICAgICAgICBmbGFnID0gdHJ1ZTsKICAgICAgICBub3RpZnkoKTsKICAgIH0KCiAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVsZWFzZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CiAgICAgICAgd2hpbGUgKCFmbGFnKSB7CiAgICAgICAgICAgIHdhaXQoKTsKICAgICAgICB9CiAgICAgICAgZmxhZyA9IGZhbHNlOwogICAgfQp9CgpjbGFzcyBTZW5kIGV4dGVuZHMgVGhyZWFkIHsKICAgIE15U2VtYXBob3JlIG15U2VtYXBob3JlOwoKICAgIHB1YmxpYyBTZW5kKE15U2VtYXBob3JlIHNlbWFwaG9yZSkgewogICAgICAgIHRoaXMubXlTZW1hcGhvcmUgPSBzZW1hcGhvcmU7CiAgICB9CgogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgaW50IGkgPSAwOwogICAgICAgIHdoaWxlIChpKysgPCAxMCkgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNlbmQiKTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIG15U2VtYXBob3JlLnRha2UoKTsKICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKY2xhc3MgUmVjZWl2ZSBleHRlbmRzIFRocmVhZCB7CiAgICBNeVNlbWFwaG9yZSBteVNlbWFwaG9yZTsKCiAgICBwdWJsaWMgUmVjZWl2ZShNeVNlbWFwaG9yZSBzZW1hcGhvcmUpIHsKICAgICAgICB0aGlzLm15U2VtYXBob3JlID0gc2VtYXBob3JlOwogICAgfQoKICAgIEBPdmVycmlkZQogICAgcHVibGljIHZvaWQgcnVuKCkgewogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBteVNlbWFwaG9yZS5yZWxlYXNlKCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZWNlaXZlIik7CiAgICAgICAgfQogICAgfQp9