Многопоточность в Java (параллельный код намного медленнее, чем последовательный) - PullRequest
0 голосов
/ 19 октября 2018

Четыре потока генерируются и передают свой диапазон, необходимый для зацикливания матрицы для выполнения некоторой операции.По сути, я хочу взять цикл for и разбить работу на четыре части.

GE_threaddiv t = new GE_threaddiv(k + 1,toPass + (k+1),k,A[k][k],"1");
        GE_threaddiv t2 = new GE_threaddiv(toPass + (k+1),toPass*2 + (k+1),k,A[k][k],"2");
        GE_threaddiv t3 = new GE_threaddiv(toPass*2 + (k+1),toPass*3 + (k+1),k,A[k][k],"3");
        GE_threaddiv t4 = new GE_threaddiv(toPass*3 + (k+1),toPass*4 + (k+1),k,A[k][k],"4");
        t.start();
        t2.start();
        t3.start();
        t4.start();
        try {
            t.join();
            t2.join();
            t3.join();
            t4.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

Каждый поток запускает цикл for с указанным диапазоном a, являющимся началом, а b - концом сегмента (передается, когда поток был создан).A - это глобальная матрица, а temp - это значение из A, переданное в поток при создании.

public void run() 
    { 
        try
        { 
                        for(int j = a; j < b; j++) {
                            A[c][j] = A[c][j]/temp;
                        }

        } 
        catch (Exception e) 
        { 
            System.out.println ("Exception is caught"); 
        } 
    } 

Моя реализация работает, однако она значительно медленнее (величины), чем если бы я запускал цикл for в последовательном режиме.Чем больше набор данных, тем медленнее время.Подтверждено, что потоки идут рядом.Я предполагаю, что снижение эффективности происходит из-за того, как каждый поток связан с доступом к памяти.Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 19 октября 2018

Функции java8 могут решить вашу проблему, параллельные потоки Java8 для многопоточности предназначены для повышения производительности и занимают очень мало времени.Я думаю, что эта ссылка может вам немного помочь

list.parallelStream().forEach(element -> doWork(element));

[Java8 Multithreading]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...