Tôi đang tìm giải pháp sử dụng mảng trong hệ thống luồng (master-Slave) cho phép tôi chia tính toán của ma trận trên nhiều luồng thông qua đầu vào của người dùng và hướng nó qua 1 luồng chính đến nhiều luồng nô lệ, Các luồng nô lệ này tính toán 1 trường của ma trận.
Tôi cố gắng áp dụng kiến thức của mình nhưng tôi chỉ chuyển vấn đề sang phương pháp. Mã này hoạt động nhưng chỉ sử dụng 1 luồng (tiếp theo là một luồng khác) thay vì sử dụng tất cả các luồng cùng một lúc.
Tôi nghĩ rằng tôi có thể chia ma trận bằng cách nào đó (đây có phải là Spliterator không?), nhưng không chắc phần thân Prop được chia như thế nào.
Cũng đã thử sử dụng giá trị boolean nếu trường kết quả trống, nhưng nó hoàn toàn không hoạt động.
import java.io.BufferedReader;
nhập java.io.File;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Arrays;
nhập java.util.Scanner;
lớp Threadverteiler mở rộng Chủ đề {
public Threadverteiler(Thread[] thread) {
đồng bộ hóa (chủ đề);
}
public void synchronisiert(Thread[] t) {
Chủ đề[] chủ đề = t;
được đồng bộ hóa (chủ đề) {
for (int i = 0; i < thread.length; i++) {
chủ đề[i].start();
System.out.println("Chủ đề " + i + " cử chỉ");
} // TODO Sơ khai hàm tạo được tạo tự động
}
}
}
lớp Chủ đề mở rộng Chủ đề {
Chủ đề công khai(int[][] a, int[][] b) {
chạy(a,b);
}
/*
* public Threadverteiler(Thread[] c, int[][] a,int[][]b) { //start();
* run(a, b); //Arrays.spliterator(a);
* //System.out.println(Arrays.spliterator(a));
*
* }
*/
public void run(int[][] a, int[][] b) {
// được đồng bộ hóa (cái này) {
// mảng boolean = false;
// int[][]cc= new int[5][5];
// công khai int[][] recnen(int[][] a,int[][]b){
// while( arrayleer==true){
int[][] aa = new int[5][5];
int[][]bb = new int[5][5];
int[][] cc = new int[5][5];
aa = a;
bb = b;
for (int i = 0; i < aa.length; i++)
{
for (int j = 0; j < bb.length; j++)
{
for (int k = 0; k < cc.length; k++)
{
cc[i] [j] = cc [i] [j] + aa [i] [k] * bb [k] [j];
// cc[i][j] = cc[i][j] + a[i][k] * b[k][j];
/*
* if(cc[i][j]==0){ i++; j++; tiếp tục;
* System.out.println("Andere thread");
* //arrayleer=false }
*/
}
}
}
/*
* thử { PrintWriter print = new PrintWriter(new File());
*
* } Catch (Ngoại lệ e) { // TODO: xử lý ngoại lệ } return cc;
*
*
* } }
*/
// c=cc;
// System.out.println("Chủ đề hoạt động " + activeCount());
System.out.println(Arrays.deepToString(cc));
System.out.println("Chủ đề đang hoạt động " + activeCount());
}
}
// }
lớp công khai Uebung2 {
public static void main(String[] args) {
int[][] a = { { 1, -2, 3, 4, -1 }, { -2, 3, 0, 1, 2 }, { 4, -1, 2, 1, -2 }, { -2, 1, 3, -1, 3},
{ 0, 2, -1, 2, 4 } };
int[][] b = { { 2, -4, -1, 1, -2 }, { -1, 1, -2, 2, 1 }, { 5, 0, 3, -2, -4 } , {1, -2, 1, 0, 2 },
{ 2, 3, -3, 0, 0 } };
// int[][] c= new int[5][5];
// System.out.println(Arrays.deepToString(a));
// System.out.println(Arrays.deepToString(b));
// public static void threadauswahl(int x){
// int i = 0;
System.out.println("Chủ đề Bitte Anzahl eingeben");
Scanner sc = new Scanner(System.in);
int eingabe = sc.nextInt();
sc.close();
Chủ đề [] chủ đề = Chủ đề mới [eingabe];
// while (luồng[i]==null) {
for (int i = 0; i < thread.length; i++) {
thread[i] = Chủ đề mới(Chủ đề mới(a, b));
// chủ đề[i].start(); // !!!!!!!!!!!!!!!!!!
// i++;
}
Threadverteiler s = new Threadverteiler(thread);
}
}
// System.out.println(Arrays.deepToString(a));
// System.out.println(Arrays.deepToString(b));
// System.out.println(Arrays.deepToString(c));
Tôi là một lập trình viên xuất sắc, rất giỏi!