Java中的多线程(并行代码比串行代码慢)

时间:2018-10-19 18:59:23

标签: java multithreading performance

将生成四个线程,并传递它们的范围以循环矩阵以进行某些操作。本质上,我的愿望是采用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();
        }

每个线程以指定的范围a为起点,b为该段的末尾(在创建线程时传入)开始for循环。 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 :(得分:2)

java8功能可以解决您的问题, 用于多线程的Java8并行流可提高性能,并减少时间。 我认为此链接可以帮助您

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

[Java8多线程]