powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Синхронизация
6 сообщений из 6, страница 1 из 1
Синхронизация
    #38772717
Caboforge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Изучаю синхронизацию в java.

Подскажите плз. Никак понять не могу.
Как такой код может перебрать все числа в разных потоках?
Я так понимаю, данный код должен в 1-м потоке перебрать все значения листа.

А у меня иногда выходит что значения перебираются всем потоками.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
public class ThreadTest extends Thread {

    private static final List<Integer> resultList = new LinkedList<Integer>();

    public static void main(String[] args) {
        for (int i = 1; i <= 100; i++) {
            resultList.add(i);
        }

        new ThreadTest().start();
        new ThreadTest().start();
        new ThreadTest().start();
        new ThreadTest().start();
        new ThreadTest().start();
        new ThreadTest().start();

    }

    @Override
    public synchronized void run() {
        int j = 0;
        while (!resultList.isEmpty()) {
            System.out.println(resultList.remove());

            j++;
        }

        System.out.println("result    " + " " + j);
    }   
}
...
Рейтинг: 0 / 0
Синхронизация
    #38772968
DDiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Caboforge,

потом что, synchronized в описание моетода это то же самое что и
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    @Override
    public void run() {
        synchronized (this) {
            int j = 0;
            while (!resultList.isEmpty()) {
                System.out.println(resultList.remove());

                j++;
            }

            System.out.println("result    " + " " + j);
        }
    }


т.е. синхронизация на сам объект. В вашем случае это всё разные объекты, и этот синхронайз вам как мертвому припарка.
это будет работать, только если все ваши потоку будут дёргать метод одного и того же объекта, с synchronized в описание.
...
Рейтинг: 0 / 0
Синхронизация
    #38772981
Caboforge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DDiver,
Спасибо!!!
...
Рейтинг: 0 / 0
Синхронизация
    #38773492
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Caboforge, в учебных примерах авторы стремяться как можно сильнее
указать на "столкновения" потоков. Дидактический подход. Вы должны
увидеть факт коллизий или захвата мутексов.

В реальности этого нужно избегать любыми способами. Самое худшее
приложение - это подобные учебные примеры.

Самое лучшее приложение - разделение данных так чтобы они вообще
не шарились. Лучше на уровне ТЗ.
...
Рейтинг: 0 / 0
Синхронизация
    #38773871
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Caboforge,

Вы обращаетесь сразу из множества потоков к одному LinkedList, который не является потокобезопасным. Так делать нельзя - потоки имеют право не видеть изменений (или части изменений) этого LinkedList.

final тут не гарантирует вообще ничего из того что вам нужно.
...
Рейтинг: 0 / 0
Синхронизация
    #38775442
Caboforge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем большое спасибо!!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Синхронизация
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]