Мой вопрос более конкретно конкретизация этого вопроса: Functional programming: state vs. reassignmentJava: состояние обмен между потоками в функциональном программировании
Я Newbee к FP и пытаюсь понять его через Java.
У меня есть следующий класс, объект разделяется между несколькими потоками:
public class Bank
{
private double[] accounts = new double[1000];
public synchronized void transfer(int from, int to, double amount)
{
account[from] -= amount;
account[to] += amount;
}
}
(Это очень упрощенный пример, следовательно, и другие детали, такие как проверка и состояние ожидания опущены).
Поскольку метод «передачи» синхронизирован, измененное состояние объекта банка не будет повреждено, даже если оно разделено несколькими потоками. Если я хочу добиться того же, что и в FP на Java, как бы написать этот код? (Я хотел бы увидеть фактический пример кода).
EDIT: мой интерес к FP проистекает из его потенциала для написания потокобезопасных одновременных приложений. Ниже приведена ссылка на статью, которая утверждает это: http://www.defmacro.org/ramblings/fp.html
EDIT2: только что узнал о STM для Java. Не уверен в его производительности, но он, кажется, обеспечивает то, что я хотел. http://multiverse.codehaus.org/60second.html
«Я Newbee к FP и пытаюсь понять его через Java» Это не очень хорошая идея. Попробуйте это вместо http://book.realworldhaskell.org/ –
Я не вижу связи между безопасностью потоков и функциональным программированием. Вы утверждаете, что использование FP приведет к отказу от необходимости синхронизации для обеспечения безопасности потоков? –
@ Давид Харкнесс Да. Одна из причин, по которым используется FP, заключается в том, что из-за парадигмы, использующей неизменяемое состояние, нет необходимости синхронизировать доступ к состоянию, следовательно, FP по своей сути является потокобезопасным и эффективным (поскольку не задействована стоимость синхронизации); и поэтому рекомендуется специально для программирования для многоядерных процессоров. Найду и приведу ссылку. – shrini1000