Matrizes com threads

Olá, gostaria de saber como posso implementar duas matrizes e logo depois exibir o resultado de uma multiplicação usando threads.
Pode ser dicas, trechos de códigos e/ou links que me ajudem. Obrigado!

desculpem, sou novo em programação.

É um exercício da faculdade? O que você já fez ou tentou fazer? O que você quer paralelizar? O cálculo da multiplicação?

sim é um exercicio da faculdade. E sim também eu quero paralelizar o calculo. o que eu fiz até agora foi criar as matrizes randomicamente a partir do numero de linhas e de colunas informadas pelo usuario. :frowning:

Vc só quer colocar o cálculo em uma Thread? É isso?

o ideal seria que fossem várias threads. Uma thread para o calculo de uma linha com uma coluna. Mas não sei como fazer.

[quote=jggoa]Olá, gostaria de saber como posso implementar duas matrizes e logo depois exibir o resultado de uma multiplicação usando threads.
Pode ser dicas, trechos de códigos e/ou links que me ajudem. Obrigado![/quote]

Se realmente fosse necessário fazer isso, theads não seria a solução. Como se trata de um problema académico …

A multiplicação de matrizes não pode ser facilmente paralelizada como vc pensa.
No java 7 e 6 dá para usar o fork/join como aqui, ou até usando a GPU como aqui, mas normalmente são algoritmos de força bruta.

O interessante seria usar o algoritmo de Strassen que diminui a complexidade do problema de O(n^3) para O(n^2.8074) e não ha algoritmos mais eficiente em termos de implementação.
Existem algoritmos com O menor, mas que na prática fazem mais operações de multiplicação e acabam sendo mais lentos.

No seu caso , implemente uma classe Matriz que contém um array de double. implemente um método multiplicar que faça as contas linearmente. ou usando o método de Strassen
Depois implemente uma classe MatrizParalela que herda de Matriz e implementa o método multiplicar de forma diferente usando threads. Isto não é trivial. Vc precisa entender como separar o calculo de forma que cada thread faça uma parte e depois juntar tudo no final quando todas as threads tiverem terminado. Vc também vai precisa entender o método join()

Em vez de classes pode usar métodos que recebem dois arrays de doubles e fazem as contas.
Verifique que os calculos do algortimo paralelo são iguais aos calculos do algortimo sequencial, mas demora menos ( na prática a diferença deverá ser muito pequena. se quiser ver a diferença faça a matriz de 100x100 ou maior)

[quote=jggoa]Olá, gostaria de saber como posso implementar duas matrizes e logo depois exibir o resultado de uma multiplicação usando threads.
Pode ser dicas, trechos de códigos e/ou links que me ajudem. Obrigado![/quote]

Primeiramente, como é que você dividiria o trabalho? Você precisa pegar o seu algoritmo e ver como é que você pode dividir o trabalho entre duas (ou mais) threads.

Faça um método que realize o cálculo que você quer fazer (como deverão ser diversos cálculos, esse método deverá ser genérico o suficiente para tratar todas as condições possíveis (pode ser que seja necessário mais de um).

Monte o mesmo de modo sequêncial (possivelmente um loop onde esse método genérico é chamado).

Feito isso, verifique se o resultado é correto.

Agora, você deverá ter:

while(condicao) { //Pode ser um for também.
   meuMetodoGenerico(argumentos);
}

Troque para:

while(condicao) { //Pode ser um for também.
   new Thread() {
      public void run() {
         meuMetodoGenerico(argumentos);
      }
   }.start();
}

Possivelmente as delarações dos argumentos (se forem variáveis, devam ser final.

A sim, talvez você precise adaptar algo na minha sugestão.
Mas antes de trabalhar com Threads, tenha certeza de ter um código que funcione corretamente de forma sequencial.