Многопоточность без использования Synchronized - PullRequest
0 голосов
/ 11 июля 2019

Я работаю над своим лабораторным уроком, Многопоточность.

В многопоточности я знаю, что, если мы используем ключевое слово synchronized, оно никогда не позволяет использовать все потоки в методе одновременно, но помещает их впоставьте их в очередь и дайте им доступ только к одному.

Но мой учитель сказал, что не рекомендуется использовать синхронизированный (не выяснил, почему, но спросит в следующем классе).

Здесьмой код

import java.util.HashMap;
import java.util.Map;

public class Testmultithread {


    static String printMe(int inp) {

        return Integer.toString(inp);       
    }

    public static void main(String[] args) {

        Map<String, Integer> listofval = new HashMap<String, Integer>();
        listofval.put("1", 1);
        listofval.put("2", 2);
        listofval.put("3", 3);
        listofval.put("4", 4);
        listofval.put("5", 5);

        for (Map.Entry<String, Integer> entry : listofval.entrySet()) {

            Testmultithread.printMe(entry.getValue());
        }
    }

}

Могу ли я узнать, как мне достичь многопоточности в приведенном выше коде (записи карты, имеющие доступ к методу printMe на уровне многопоточности) без использования ключевого слова synchronized ...?

Подскажите пожалуйста ...!

Спасибо

1 Ответ

0 голосов
/ 12 июля 2019

Есть метод, который просто отображает значения из N-го индекса.'N' будет статической переменной уровня поля.

Есть поток с методом run, который выполняется вечно и выполняет следующие действия.1) Распечатать значение в индексе 'n'.2) Приращение N. 3) Если N> размер списка, то 'break'.Пусть 'N' будет 'Атомным целым числом'.

В методе main есть два потока и просто запустите их.Пусть ваш список содержит около 100 значений, так что вы можете видеть, как два потока выбирают значения.

Однако это не потокобезопасно, и два потока могут получить одинаковое значение 'N'.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...