import java.util.concurrent.locks.ReentrantLock;
public class Program {
public static void main
(String[] args
) {
CommonResource commonResource= new CommonResource();
ReentrantLock locker = new ReentrantLock(); // создаем заглушку
for (int i = 1; i < 6; i++){
Thread t
= new Thread(new CountThread
(commonResource, locker
)); t.setName("Thread "+ i);
t.start();
}
}
}
class CommonResource{
int x=0;
}
CommonResource res;
ReentrantLock locker;
CountThread(CommonResource res, ReentrantLock lock){
this.res=res;
locker = lock;
}
public void run(){
locker.lock(); // устанавливаем блокировку
try{
res.x=1;
for (int i = 1; i < 5; i++){
System.
out.
printf("%s %d \n",
Thread.
currentThread().
getName(), res.
x); res.x++;
}
}
System.
out.
println(e.
getMessage()); }
finally{
locker.unlock(); // снимаем блокировку
}
}
}
aW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLlJlZW50cmFudExvY2s7CiAKcHVibGljIGNsYXNzIFByb2dyYW0gewogIAogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICAgCiAgICAgICAgQ29tbW9uUmVzb3VyY2UgY29tbW9uUmVzb3VyY2U9IG5ldyBDb21tb25SZXNvdXJjZSgpOwogICAgICAgIFJlZW50cmFudExvY2sgbG9ja2VyID0gbmV3IFJlZW50cmFudExvY2soKTsgLy8g0YHQvtC30LTQsNC10Lwg0LfQsNCz0LvRg9GI0LrRgwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgNjsgaSsrKXsKICAgICAgICAgICAgICAKICAgICAgICAgICAgVGhyZWFkIHQgPSBuZXcgVGhyZWFkKG5ldyBDb3VudFRocmVhZChjb21tb25SZXNvdXJjZSwgbG9ja2VyKSk7CiAgICAgICAgICAgIHQuc2V0TmFtZSgiVGhyZWFkICIrIGkpOwogICAgICAgICAgICB0LnN0YXJ0KCk7CiAgICAgICAgfQogICAgfQp9CiAgCmNsYXNzIENvbW1vblJlc291cmNlewogICAgICAKICAgIGludCB4PTA7Cn0KICAKY2xhc3MgQ291bnRUaHJlYWQgaW1wbGVtZW50cyBSdW5uYWJsZXsKICAKICAgIENvbW1vblJlc291cmNlIHJlczsKICAgIFJlZW50cmFudExvY2sgbG9ja2VyOwogICAgQ291bnRUaHJlYWQoQ29tbW9uUmVzb3VyY2UgcmVzLCBSZWVudHJhbnRMb2NrIGxvY2spewogICAgICAgIHRoaXMucmVzPXJlczsKICAgICAgICBsb2NrZXIgPSBsb2NrOwogICAgfQogICAgcHVibGljIHZvaWQgcnVuKCl7CiAgICAgICAgIAogICAgICAgIGxvY2tlci5sb2NrKCk7IC8vINGD0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8INCx0LvQvtC60LjRgNC+0LLQutGDCiAgICAgICAgdHJ5ewogICAgICAgICAgICByZXMueD0xOwogICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IDU7IGkrKyl7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigiJXMgJWQgXG4iLCBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKSwgcmVzLngpOwogICAgICAgICAgICAgICAgcmVzLngrKzsKICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCgxMDApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGUpewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgIH0KICAgICAgICBmaW5hbGx5ewogICAgICAgICAgICBsb2NrZXIudW5sb2NrKCk7IC8vINGB0L3QuNC80LDQtdC8INCx0LvQvtC60LjRgNC+0LLQutGDCiAgICAgICAgfQogICAgfQp9