Многопоточность*Thread

118
19 февраля 2021, 18:20

такое задание - есть какой-то массив и число в этом массиве, нужно создать два потока, первый из которых рассматривает первую часть массива, второй -вторую, И в зависимости от того,где было найдено число - выдается результат Пример Array { 2, 7, 3, 9, 23 } число : 7 • Thread 1: найдет • Thread 2: не найдет

вот,что я написал

public class Aufgabe1 implements  Runnable {
    private int [] arr;
    private int von,bis,zahl;
    private boolean isgefunden = false;

    public Aufgabe1(int[] arr, int von,int bis,int zahl) {
        this.arr = arr;
        this.von = von;
        this.bis = bis;
        this.zahl = zahl;
    }
    @Override
    public void run() {
        for (int i = von; i < bis; i++) {
            if (arr[i] == zahl){
                isgefunden = true;
            }
            }
        }

    public static void main(String[] args) {
        int arr [] =  new int[]{3, 2, 4, 5, 86,55,26,35,15,28};
        Aufgabe1 aufgabe1 = new Aufgabe1(arr,0,arr.length/2,4);
        Thread thread1 = new Thread(aufgabe1);
        thread1.start();
        Aufgabe1 aufgabe2 = new Aufgabe1(arr,arr.length/2+1,arr.length,4);
        Thread thread2 = new Thread(aufgabe2);
        thread2.start();

    }
}

теперь не пойму,как записать, найден/ненайдет, т е использовать isgefunden

Answer 1

После цикла в методе run() напишите:

System.out.println("Поток " + Thread.currentThread().getName() + (isgefunden ? " нашёл число." : " не нашёл число."));

Также можно и через if:

if(isgefunden) 
    System.out.println("Поток" ну и так далее);
else 
    System.out.println так далее);
Answer 2
public class Aufgabe1 implements  Runnable {
private String name;
private int [] arr;
private int von,bis,zahl;
private boolean isgefunden = false;

public Aufgabe1(String name, int[] arr, int von,int bis,int zahl) {
    this.name = name;
    this.arr = arr;
    this.von = von;
    this.bis = bis;
    this.zahl = zahl;
}
@Override
public void run() {
    for (int i = von; i < bis; i++) {
        if (arr[i] == zahl){
            isgefunden = true;
            System.out.println(name + " нашел число " + zahl);
            return;
        }
    }
}

public static void main(String[] args) {
    int arr [] =  new int[]{3, 2, 4, 5, 86,55,26,35,15,28};
    Aufgabe1 aufgabe1 = new Aufgabe1("Thread-1", arr,0,arr.length/2,4);
    Thread thread1 = new Thread(aufgabe1);
    thread1.start();
    Aufgabe1 aufgabe2 = new Aufgabe1("Thread-2", arr,arr.length/2+1,arr.length,4);
    Thread thread2 = new Thread(aufgabe2);
    thread2.start();
}

}

Например, вот так

READ ALSO
Избавиться от Unnecessary boxing

Избавиться от Unnecessary boxing

Есть такой код

104
Java robot ломается в цикле

Java robot ломается в цикле

Недавно столкнулся с такой проблемой, как невозможность последовательного выполнения большого количества команд в цикле for в комбинации...

124
Преобразовать формат даты

Преобразовать формат даты

Приходит JSON вот с такой датой:

109
ошибка java.lang.NullPointerException, не стартует программа [закрыт]

ошибка java.lang.NullPointerException, не стартует программа [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

124