将生成四个线程,并传递它们的范围以循环矩阵以进行某些操作。本质上,我的愿望是采用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循环的速度(幅度)大得多。数据集越大,时间越慢。确认线程正在并排运行。我的猜测是效率的下降是由于每个线程如何与内存访问有关。任何帮助将不胜感激!
答案 0 :(得分:2)
java8功能可以解决您的问题, 用于多线程的Java8并行流可提高性能,并减少时间。 我认为此链接可以帮助您
list.parallelStream().forEach(element -> doWork(element));
[Java8多线程]