Управление потоками. Java. Wait() и Notify()

180
12 февраля 2018, 03:50

Данная мне задача состоит в создании двух потоков, один из которых записывает значение в переменную, а другой после него считывает это значение и выводит. Итерация повторяется заданное количество раз (number). В задании нельзя использовать wait() с параметром, yield() и sleep(). Не совсем понимаю, почему вывод после запуска моего кода показывает совершенно другую картину(потоки меняются местами), да и строк с выводом должно быть четное количество(2*number), что не всегда так на практике. Буду благодарен любому совету.

public class Main {
public static void main(String[] args) {
    int number;
    Scanner in = new Scanner(System.in);
    System.out.println("Enter the amount of iterations:");
    number = in.nextInt();
    CommonResource resource = new CommonResource(5);
    Thread readingThread = new Thread(new Runnable() {
        @Override
        public synchronized void run() {
            System.out.println("The 2nd thread has read value " + resource.getX());
            notify();
        }
    });
    Thread writingThread = new Thread(new Runnable() {
        @Override
        public synchronized void run() {
            resource.setX(resource.getX() + 1);
            System.out.println("The 1st thread has applied value " + resource.getX());
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    });
    writingThread.start();
    readingThread.start();
    for (int i = 0; i < number - 1; i++) {
        writingThread.run();
        readingThread.run();
    }
}

}

READ ALSO
Как собрать ArrayList из последних 10 элементов другого ArrayList?

Как собрать ArrayList из последних 10 элементов другого ArrayList?

Как собрать ArrayList из последних 10 элементов другого ArrayList? (В последнем всегда 10 или более элементов)Все элементы в ArrayList - Integer

173
Unable to start deamon process

Unable to start deamon process

Судя по выданной мне студией ошибке мне нужно запустить deamon, насколько я знаю во время gradle build deamon включался самКак решить проблему?

137
Процессор ядро потоки кто за что отвечат?

Процессор ядро потоки кто за что отвечат?

Здраствуйте ,изучаю многопоточность и столкнулся с некоторыми вещами и немогу собрать информацию во единоПРошу вас помочь мне в этом

151
Java, работа с кодировкой

Java, работа с кодировкой

Уважаемые Друзья! Подскажите, пожалуйста, решение задачи: "Написать программу, определяющую, содержит ли строка символы, байтовое представление...

194