здесь я реализовал две следующие функции, как показано ниже:
Output1 computeFirst(Input1 input) {
String lockName = input.getId();
LockItem lockItem = acquireLock(lockName);
try{
#critical section
}catch(Exception e){
log.error(e);
}finally{
releaseLock(lockItem);
}
}
Output2 computeSecond(Input2 input) {
String lockName = input.getId();
LockItem lockItem = acquireLock(lockName);
try{
#critical section
}catch(Exception e){
log.error(e);
}finally{
releaseLock(lockItem);
}
}
Эти две вышеуказанные функции вызываются в другом потоке.
Из вышеупомянутых двух функций я хочу абстрагировать функциональность acquLock и releaseLock, написав еще одну функцию, как показано ниже:
executeWithLock(String lockName, funcionReference) {
String lockName = input.getId();
LockItem lockItem = acquireLock(lockName);
try{
func.apply
} catch(Exception e){
log.error(e);
} finally {
releaseLock(lockItem);
}
}
Я не могу понять, как бы я реализовал эту функцию executeWithLock, в этом контексте я просмотрел связанные посты в stackoverflow, касающиеся того, как передать функцию в качестве аргумента, но не смог понять многое.