import java.util.concurrent.ConcurrentHashMap;
/**
* User: And390
* Date: 14.06.14
* Time: 0:21
*/
public class Main {
private static final ConcurrentHashMap
<Object, Object
> LOCKS
= new ConcurrentHashMap
<Object, Object
> ();
public static void saveSomethingImportantToDataBase
(Object id
) { Object lock
= LOCKS.
putIfAbsent(id, newLock
); synchronized (lock!=null ? lock : newLock) {
}
LOCKS.remove(id);
}
public static Thread startTestThread
() { Thread thread
= new Thread() { public void run
() { saveSomethingImportantToDataBase
(1); } }; thread.start();
return thread;
}
startTestThread();
startTestThread();
startTestThread();
}
}
aW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRIYXNoTWFwOwoKLyoqCiAqIFVzZXI6IEFuZDM5MAogKiBEYXRlOiAxNC4wNi4xNAogKiBUaW1lOiAwOjIxCiAqLwpwdWJsaWMgY2xhc3MgTWFpbiB7CgogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ29uY3VycmVudEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+IExPQ0tTID0gbmV3IENvbmN1cnJlbnRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PiAoKTsKCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2F2ZVNvbWV0aGluZ0ltcG9ydGFudFRvRGF0YUJhc2UoT2JqZWN0IGlkKSB7CiAgICAgICAgT2JqZWN0IG5ld0xvY2sgPSBuZXcgT2JqZWN0ICgpOwogICAgICAgIE9iamVjdCBsb2NrID0gTE9DS1MucHV0SWZBYnNlbnQoaWQsIG5ld0xvY2spOwogICAgICAgIHN5bmNocm9uaXplZCAobG9jayE9bnVsbCA/IGxvY2sgOiBuZXdMb2NrKSAgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJlZ2luIik7CiAgICAgICAgICAgIHRyeSAgeyAgVGhyZWFkLnNsZWVwKDEwMDApOyAgfSAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpICB7fQogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVuZCIpOwogICAgICAgIH0KICAgICAgICB0cnkgIHsgIFRocmVhZC5zbGVlcCg1MDApOyAgfSAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpICB7fSAgLy8gISB0aGlzIGlzIHNob3dzIGVycm9yIGluIG11bHRpLXRocmVhZCBlbnZpcm9ubWVudAogICAgICAgIExPQ0tTLnJlbW92ZShpZCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBUaHJlYWQgc3RhcnRUZXN0VGhyZWFkKCkgewogICAgICAgIFRocmVhZCB0aHJlYWQgPSBuZXcgVGhyZWFkKCkgIHsgIHB1YmxpYyB2b2lkIHJ1bigpICB7ICBzYXZlU29tZXRoaW5nSW1wb3J0YW50VG9EYXRhQmFzZSgxKTsgIH0gIH07CiAgICAgICAgdGhyZWFkLnN0YXJ0KCk7CiAgICAgICAgcmV0dXJuIHRocmVhZDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICBzdGFydFRlc3RUaHJlYWQoKTsKICAgICAgICBzdGFydFRlc3RUaHJlYWQoKTsKICAgICAgICBUaHJlYWQuc2xlZXAoMTAwMCs1MDArMTAwKTsKICAgICAgICBzdGFydFRlc3RUaHJlYWQoKTsKICAgIH0KCn0K