Многопоточно посчитать сумму на java

Рейтинг: 1Ответов: 1Опубликовано: 09.11.2014

Не знаком с многопоточностью. Надо подсчитать интеграл с помощью суммы на java. Пользователь выбирает точность и количество потоков. Задается количество -n, на которое разбивается отрезок (a, b).

Я думаю, будет какой-то класс Controller, который будет управлять потоками, раздавать им задачи. И слагаемые этой всей суммы будут постепенно наращивать общую переменную суммы в самом Controller, а уже посчитанные индексы будут где-то хранится в списке. В конце просто вывести сумму. Не знаю, как это реализовывать на java.

Вот как это сделать в одном потоке?

private double InFunction(double x){
        return Math.sin(x);
    }

    public double calcIntegral(double a, double b, int n)
    {
        double result, h;
        int i;

        h = (b-a)/n; //Шаг сетки
        result = 0;

        for(i=1; i <= n; i++)
        {
            result += InFunction(a + h * i - h/2); //Вычисляем в средней точке и добавляем в сумму
        }
        result *= h;
        return result;
    }

Я уже сделал двумя способами: с помощью notify, wait и вторым способом - с помощью join

Ответы

▲ 1Принят

Не знаю, как в Java, а на .NET ручное управление потоками считается низкоуровневым моветоном. Вместо этого пишут так:

var h = (b - a)/n;
return ParallelEnumerable.Range(1, n).Sum(i => InFunction(a + h * i - h/2)) * h;