/* package whatever; // don't place package name! */
import java.util.concurrent.ConcurrentHashMap;
/* Name of the class has to be "Main" only if the class is public. */
{
private static ConcurrentHashMap
<String, String
> chm
= null; private static boolean go = false;
public static void setConcurrentHashMap
(ConcurrentHashMap
<String, String
> c
) { System.
out.
println("Setting CHM " + System.
identityHashCode(c
)); chm = c;
}
public static ConcurrentHashMap
<String, String
> getConcurrentHashMap
() { return chm;
}
public void run() {
try {
synchronized (syncloc) {
while (!go) {
syncloc.wait();
}
}
ConcurrentHashMap
<String, String
> mymap
= getConcurrentHashMap
(); if (mymap == null) {
mymap
= new ConcurrentHashMap
<String, String
>(); setConcurrentHashMap(mymap);
}
ie.printStackTrace();
}
}
{
for (int i = 0; i < threads.length; i++) {
threads
[i
] = new Thread(new Ideone
()); threads[i].start();
}
synchronized (syncloc) {
go = true;
syncloc.notifyAll();
}
t.join();
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRIYXNoTWFwOwoKLyogTmFtZSBvZiB0aGUgY2xhc3MgaGFzIHRvIGJlICJNYWluIiBvbmx5IGlmIHRoZSBjbGFzcyBpcyBwdWJsaWMuICovCmNsYXNzIElkZW9uZSBpbXBsZW1lbnRzIFJ1bm5hYmxlCnsKICAgIAogICAgcHJpdmF0ZSBzdGF0aWMgQ29uY3VycmVudEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGNobSA9IG51bGw7CiAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBPYmplY3Qgc3luY2xvYyA9IG5ldyBPYmplY3QoKTsKICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZ28gPSBmYWxzZTsKICAgIAogICAgcHVibGljIHN0YXRpYyB2b2lkIHNldENvbmN1cnJlbnRIYXNoTWFwKENvbmN1cnJlbnRIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBjKSB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXR0aW5nIENITSAiICsgU3lzdGVtLmlkZW50aXR5SGFzaENvZGUoYykpOwogICAgICAgIGNobSA9IGM7CiAgICB9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgQ29uY3VycmVudEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGdldENvbmN1cnJlbnRIYXNoTWFwKCkgewogICAgICAgIHJldHVybiBjaG07CiAgICB9CiAgICAKICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHN5bmNsb2MpIHsKICAgICAgICAgICAgICAgIHdoaWxlICghZ28pIHsKICAgICAgICAgICAgICAgICAgICBzeW5jbG9jLndhaXQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBDb25jdXJyZW50SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbXltYXAgPSBnZXRDb25jdXJyZW50SGFzaE1hcCgpOwogICAgICAgICAgICBpZiAobXltYXAgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgbXltYXAgPSBuZXcgQ29uY3VycmVudEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CiAgICAgICAgICAgICAgICBzZXRDb25jdXJyZW50SGFzaE1hcChteW1hcCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgewogICAgICAgICAgICBpZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIAogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCiAgICB7CiAgICAgICAgCiAgICAgICAgVGhyZWFkW10gdGhyZWFkcyA9IG5ldyBUaHJlYWRbNV07CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aHJlYWRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRocmVhZHNbaV0gPSBuZXcgVGhyZWFkKG5ldyBJZGVvbmUoKSk7CiAgICAgICAgICAgIHRocmVhZHNbaV0uc3RhcnQoKTsKICAgICAgICB9CiAgICAgICAgc3luY2hyb25pemVkIChzeW5jbG9jKSB7CiAgICAgICAgICAgIGdvID0gdHJ1ZTsKICAgICAgICAgICAgc3luY2xvYy5ub3RpZnlBbGwoKTsKICAgICAgICB9CiAgICAgICAgZm9yIChUaHJlYWQgdCA6IHRocmVhZHMpIHsKICAgICAgICAgICAgdC5qb2luKCk7CiAgICAgICAgfQogICAgfQp9