Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
1 / 1 / 0
Регистрация: 13.01.2012
Сообщений: 28

Оператор synchronized

10.08.2013, 17:48. Показов 2602. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Изучаю потоки в Java по полному руководству Шилдта. Добрался до синхронизированных методов (если быть точным, то до использования блока synchronized). Там есть пример:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//Эта программа использует синхронизированный блок. 
class Callme {
    void call(String msg) {
        System.out.print("[" + msg);
        try {
            Thread.sleep(1000);
        } catch(InterruptedException e) {
            System.out.println("Interrupted");
        }
        System.out.println("]");
    }
}
 
class Caller implements Runnable {
    String msg;
    Callme target;
    Thread t;
    
    public Caller(Callme targ, String s) {
        target = targ;
        msg = s;
        t = new Thread(this);
        t.start();
    }
    //Синхронизированные вызовы callme
    public void run() {
        synchronized(target) {//синхронизированный блок
            target.call(msg);
        }
    }
}
 
class Synch {
    public static void main(String args[]) {
        Callme target = new Callme();
        Caller ob1 = new Caller(target, "Добро пожаловать");
        Caller ob2 = new Caller(target, "в синхронизированный");
        Caller ob3 = new Caller(target, "мир!");
        //Пробовал задать приоритет каждому потоку. Сначала 10, 8, 5 - не помогло.
        /*ob1.t.setPriority(5);
        ob2.t.setPriority(3);
        ob3.t.setPriority(1);*/
        //Ожидание завершения потока
        try {
            ob1.t.join();
            ob2.t.join();
            ob3.t.join();
        } catch(InterruptedException e) {
            System.out.println("Прервано.");
        }
    }
}
Но вывод этой программы создает такое впечатление, что синхронизация вообще не работает. Я пробовал задавать приоритет - не помогло. Подскажите в чем причина? Операционная система: Windows 7, 86-x.
Миниатюры
Оператор synchronized   Оператор synchronized  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.08.2013, 17:48
Ответы с готовыми решениями:

Почему не работает оператор synchronized?
Добрый вечер. Есть программа. Хочу чтобы объекты запускались последовательно в многопоточной программе, но оператор synchronized не...

synchronized
class Data { int count =0; static int countSt =0; } class MyThread implements Runnable { Data obj;

Synchronized
Народ, помогите разобраться... Resource resource и Resource res, это две ссылки на один объект? Я в ступоре, т.ч., извините за...

7
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
10.08.2013, 19:17
Что не так?
0
1 / 1 / 0
Регистрация: 13.01.2012
Сообщений: 28
10.08.2013, 20:57  [ТС]
Цитата Сообщение от KuKu Посмотреть сообщение
Что не так?
Посмотрите на вывод. Если я задаю приоритет каждому потоку, то в теории должно выводить всегда так.
Миниатюры
Оператор synchronized  
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
10.08.2013, 21:23
Цитата Сообщение от KChernenko Посмотреть сообщение
Если я задаю приоритет каждому потоку, то в теории должно выводить всегда так.
Конечно нет. Приоритет потоков не влияет на порядок захвата монитора. А количество инструкций выполняемых до synchronized очень мало.
1
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
10.08.2013, 21:43
На приоритет потоков лучше не полагаться. На длинных задачах его влияние может и можно заметить, на коротких - уже вряд ли. Момент запуска потока - больше вероятностный процесс.
1
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
11.08.2013, 11:08
Цитата Сообщение от turbanoff Посмотреть сообщение
Конечно нет. Приоритет потоков не влияет на порядок захвата монитора.
Ага, если бы ещё все это понимали. Вспоминаю недавние вступительные тесты в универ где были многопоточные приложения с разными приоритетами потоков меняющие несколько переменных из разных потоков не атомарными операциями и в конце вопрос "ну и чего в этих переменных будет, а ?".
0
 Аватар для tabber
37 / 41 / 3
Регистрация: 10.10.2010
Сообщений: 364
11.08.2013, 16:22
Приоритет потоков не влияет на порядок захвата монитора.
что за бред. А для чего по твойму нужен приоритет? В мониторе будет находиться чаще тот поток у которого приоритет больше
п.с. ну конечно управлять порядком таким образом это да - ахинея
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
11.08.2013, 21:14
Цитата Сообщение от tabber Посмотреть сообщение
что за бред. А для чего по твойму нужен приоритет? В
Для разграничения времени CPU. А откуда вы взяли что приоритет потока может повлиять на порядок захвата монитора?
Цитата Сообщение от tabber Посмотреть сообщение
В мониторе будет находиться чаще тот поток у которого приоритет больше
Учитывая то что в примере каждый поток захватывает монитор один раз, это высказывание лишено смысла.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.08.2013, 21:14
Помогаю со студенческими работами здесь

Synchronized and monitor
Когда читаешь про synchronized всегда видишь что-то такое: Объясните мне пожалуйста как это соотносится с понятием монитора. ...

Метод synchronized
Да здравствуйте таваищи читаю про потоки, есть уже пару вопросов. -почему обязательно делать так?: *.start() -если можно сразу,...

К экспертам про synchronized
Доброго времени суток! Вопрос к экспертам! Как вы считаете насколько правильно и эффективно использовать synchronized вот в таком...

Различия synchronized и Lock
Нашёл на просторах такое сравнение, но честно говоря не совсем понял: 1. Я так понимаю, что у тредов будет какой-то порядок...

Что заблокирует synchronized?
Приветствую. Предположим, имеется следующий класс. class Class1 { public void Method1() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru