Java взаимодействие потоков

146
30 апреля 2019, 15:50

возник такой вопрос Почему у меня поток, который я передаю в классе CalculateThread не возобновляет свою работу, когда метод run() выполнился.

public class CalculateThread extends Thread {
    CalculateThread(Thread a) {
        synchronized (a) {
            try {
                a.wait();
            }
            catch(InterruptedException e){
                e.printStackTrace();
            }
        }
    }
    public void run(){
        synchronized (Main.a){
            Main.a.sqrtX = Main.a.x * Main.a.x;
        }
        synchronized (this){
            notify();
        }
    }
}

Вот класс объекта, который я передаю в сам поток CalculateThread

public class MainThread extends Thread {
    public void run(){
        Main.a = new MyObject();
        int key;
        do {
            System.out.println("1 - Ввести число.");
            System.out.println("2 - Получить квадрат числа.");
            System.out.println("0 - Выход.");
            key = Main.EnterNumber();
            switch(key){
                case 1:
                    System.out.println("Введите число: ");
                    Main.a.x = Main.EnterNumber();
                    break;
                case 2:
                    CalculateThread obj = new CalculateThread(this);
                    obj.start();
                    System.out.println("Квадрат числа " + Main.a.x + " равняется " + Main.a.sqrtX);
                    break;
                case 0:
                    break;
                default:
                    System.out.println("Выберите одно из списка.");
                    break;
        }
    }while (key != 0);
}

}

И сам объект MyObject, над которым у меня проводятся вычисления

public class MyObject {
    int x;
    int sqrtX;
    MyObject(){
        x = 0;
        sqrtX = 0;
    }
    MyObject(int x){
        this.x = x;
        sqrtX = 0;
    }
}

Буду благодарен за любой совет, т.к. только начал разбираться в потоках.

Answer 1

В конструкторе класса CalculateThread вы останавливаете поток MainThread до того, как выполняется запуск этого потока в MainThread obj.start(); Так что поток не запускается и notify не выполняется. Вообще структура классов странная.

READ ALSO
Не запускается код Java

Не запускается код Java

Доброе утро, товарищи программисты!

154
LibGDX обработка нажатий

LibGDX обработка нажатий

Некорректная работа InputProcessor на андроиде версии выше 51 (судя по проведенным тестам)

175
Ошибка при десериализации JSON с помощью Jersey

Ошибка при десериализации JSON с помощью Jersey

Пока разбираюсь именно с Jersey, поэтому не предлагайте другие библиотеки

160
Запуск java файла после компиляции

Запуск java файла после компиляции

Почему после в консоли после компиляции java файла1)Командой javac Helloworld

179