powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Изучение многопоточности в Java
25 сообщений из 32, страница 1 из 2
Изучение многопоточности в Java
    #39395440
andrsam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! В требованиях к вакансиям среди прочих указано знание многопоточности. Простое изучение литературы без практики не даст результата. Отсюда вопрос - не посоветуете какие-нибудь задачи, решая которую можно изучить данную предметную область?
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39395450
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrsam,

До определенного момента даст. Ну как минимум в обычный аутсорс интервью пройти шансы будут.

Но, поддерживаю.

Кстати предлагаю разобрать, кто чувствует силы в себе, по полочкам пример кода:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public class App {
    final int[] data;
    public App() {
        this.data = new int[]{1, 0};
        this.data[1] = 2;
    }

    static App instance;
    public static void main(String[] args) {
        new Thread(new Runnable() {
            public void run() {
                instance = new App();
            }
        }).start();

        while (instance == null) {/*NOP*/}
        System.out.println(Arrays.toString(instance.data));
    }
}




P.S.
Ожидаю, что сейчас посоветуют читать Concurrency in practise. Но для начала это слишком суровое чтиво.
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39395464
andrsam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
questioner,

А несуровое чтиво не посоветуете?)
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39395466
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrsamquestioner,

А несуровое чтиво не посоветуете?)

Для понимания общих принципов мне эта статья более менее нравится: http://www.javaspecialist.ru/2011/06/java-memory-model.html

на хабре много статеек, но да, есть ощущение, что по нитке собираешь понимание.
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39395477
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrsamquestioner,

А несуровое чтиво не посоветуете?)

ну как раз Java Concurrency in Practice не так уж и суров, по сравнению с тем же Art Of Multiprocessor programming. Просто сама по себе тема сложная, а изложение в JCP очень даже хорошее, просто надо читать внимательно.

Ну и да, вы правы, теория без практики быстро выветривается. Попробуйте написать какой-нибудь полезный пайплайн. Например, вытягивать какие-то веб-страницы(объявления продажи автомобилей и тп). Пайплайн будет состоять из шагов 1) вычитать страницу 2) отформатировать(извлечь нужное) 3) сохранить в базу данных. - все степы в отдельных потоках. Одни вычитывают, другие парсят, третьи сохраняют

И чтоб все быстро четко и многопоточно:) Ну и корректно.
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39395530
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerДля понимания общих принципов мне эта статья более менее нравится: http://www.javaspecialist.ru/2011/06/java-memory-model.html
на хабре много статеек, но да, есть ощущение, что по нитке собираешь понимание.

Лучше, чем слушать Шипилёва , по-русски ничего нет. Редкое сочетание полного понимания вопроса и умения хорошо объяснять.
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39395590
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл никПайплайн
конвеер по-русски?
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39395657
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey TominquestionerДля понимания общих принципов мне эта статья более менее нравится: http://www.javaspecialist.ru/2011/06/java-memory-model.html
на хабре много статеек, но да, есть ощущение, что по нитке собираешь понимание.

Лучше, чем слушать Шипилёва , по-русски ничего нет. Редкое сочетание полного понимания вопроса и умения хорошо объяснять.

а у него есть где-то изложение от начала и до конца? я смотрел несколько видосов, мне кажется, что он просто рассказывает, что ему нравится, развеивает мифы и т.д.

В каком порядке видосы смотреть?
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39395658
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну и кстати, господа, насчёт практики, кто нить может таки про код то пояснить?
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39395701
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerAlexey TominЛучше, чем слушать Шипилёва , по-русски ничего нет. Редкое сочетание полного понимания вопроса и умения хорошо объяснять.
а у него есть где-то изложение от начала и до конца? я смотрел несколько видосов, мне кажется, что он просто рассказывает, что ему нравится, развеивает мифы и т.д.
В каком порядке видосы смотреть?

Вы издеваетесь? Я привёл ссылку, там идут два видео. Вот так и смотреть. Сначала первое, потом второе.
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39395712
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerНу и кстати, господа, насчёт практики, кто нить может таки про код то пояснить?

С практикой, реально, плохо. Потому что если написать плохой код, то этого можно не заметить.
При этом код может быть некорректным, на работать на компе разработчика. И даже на куче других.
Шипилёв рассказывал, как ему в RedHat и Oracle давали ревьювить неправильный код. Вроде не дураки, а ошибки- прямо как в соседнем треде "должно работать".
По-моему надо как раз для начала смотреть видео и решать по ходу задачки, плюс читать задачки отсюда . Когда все найденные примеры решаешь правильно- пора ехать на jpoint/joker/... и в кулуарах мучать того же Шипелёва- он готов побеседовать, если человек понимает базовые принципы (грубо- решает все вышеуказанные задачки).
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39395719
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Tominquestionerпропущено...

а у него есть где-то изложение от начала и до конца? я смотрел несколько видосов, мне кажется, что он просто рассказывает, что ему нравится, развеивает мифы и т.д.
В каком порядке видосы смотреть?

Вы издеваетесь? Я привёл ссылку, там идут два видео. Вот так и смотреть. Сначала первое, потом второе.

Ок) первое отсмотрел. и кстати понимаю откуда у вас такая уверенность, что гарантий нет, что последующее после записи чтение может прочитать старое значение, но по-моему он там пытается нечто другое объяснить. К тому же в самом конце в примере он предлагает делать переменную volatile. В теории до примера он говорит, что Если мы увилим волатильную переменную измененной, то увидим и все, что было сделано перед ней, НО , судя по всему, подразумевается, что условием видимости будет то, что чтение произошло после записи.

YouTube Video
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39395762
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На вскидку:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public class App {
    final int[] data; 
    public App() { // здесь ок - конструктор "safe", если хоть одно поле final - у нас hb после //инициализации
        this.data = new int[]{1, 0}; 
        this.data[1] = 2; 
    }

    static App instance;
    public static void main(String[] args) {
        new Thread(new Runnable() {
            public void run() {
                instance = new App(); // dirty write
            }
        }).start();

        while (instance == null) {/*NOP*/} //dirty read, здесь вероятно будет бесконечный цикл
        System.out.println(Arrays.toString(instance.data)); // здесь hb чтение поля и инициализации в конструкторе, {1, 2} если дойдет до сюда
    }
}
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39395765
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner НО , судя по всему, подразумевается, что условием видимости будет то, что чтение произошло после записи.

Да. Вопрос, что есть сразу после записи .
На следующий такт? Через 10 тактов?
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39395785
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey TominquestionerНу и кстати, господа, насчёт практики, кто нить может таки про код то пояснить?

С практикой, реально, плохо. Потому что если написать плохой код, то этого можно не заметить.
При этом код может быть некорректным, на работать на компе разработчика. И даже на куче других.
Шипилёв рассказывал, как ему в RedHat и Oracle давали ревьювить неправильный код. Вроде не дураки, а ошибки- прямо как в соседнем треде "должно работать".
По-моему надо как раз для начала смотреть видео и решать по ходу задачки, плюс читать задачки отсюда . Когда все найденные примеры решаешь правильно- пора ехать на jpoint/joker/... и в кулуарах мучать того же Шипелёва- он готов побеседовать, если человек понимает базовые принципы (грубо- решает все вышеуказанные задачки).

Так мой вопрос о том гарантирован ли какой-либо вывод в представленном коде?

Если Вы пишете многопоточный код, это обычная ситуация - code review. Что неуместного в этом вопросе?
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39395802
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Tominquestioner НО , судя по всему, подразумевается, что условием видимости будет то, что чтение произошло после записи.

Да. Вопрос, что есть сразу после записи .
На следующий такт? Через 10 тактов?

Чего придумывать то, если чтение началось в момент, когда запись завершилась, то тогда и видно будет.
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39395817
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrsamЗдравствуйте! В требованиях к вакансиям среди прочих указано знание многопоточности. Простое изучение литературы без практики не даст результата. Отсюда вопрос - не посоветуете какие-нибудь задачи, решая которую можно изучить данную предметную область?

Меня как то на интервью спросили написать програмку по "Спящему Парикмахеру" Дейкстры. Я решил не заморачиваться и написал через очередь с блокировкой. Потом решил опубликовать решение.

https://vyatkins.wordpress.com/2013/12/21/sleeping-barber-problem/
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39395820
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey TominquestionerНу и кстати, господа, насчёт практики, кто нить может таки про код то пояснить?

С практикой, реально, плохо. Потому что если написать плохой код, то этого можно не заметить.
При этом код может быть некорректным, на работать на компе разработчика. И даже на куче других.
Шипилёв рассказывал, как ему в RedHat и Oracle давали ревьювить неправильный код. Вроде не дураки, а ошибки- прямо как в соседнем треде "должно работать".
По-моему надо как раз для начала смотреть видео и решать по ходу задачки, плюс читать задачки отсюда . Когда все найденные примеры решаешь правильно- пора ехать на jpoint/joker/... и в кулуарах мучать того же Шипелёва- он готов побеседовать, если человек понимает базовые принципы (грубо- решает все вышеуказанные задачки).

Да там в основном задротские вопросы, в жизни этого можно избежать

обычные бы все для начала устаканить.
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39395927
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergunkaМеня как то на интервью спросили написать програмку по "Спящему Парикмахеру" Дейкстры. Я решил не заморачиваться и написал через очередь с блокировкой. Потом решил опубликовать решение.

https://vyatkins.wordpress.com/2013/12/21/sleeping-barber-problem/
Твое игнорирование InterrupedException вызвало-бы вопросы на собеседовании.
По крайней мере надо-бы бы в каментах написать почему игнорим и почему
это ни к чему плохому не приведет.
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39396046
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
no56892На вскидку:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public class App {
    final int[] data; 
    public App() { // здесь ок - конструктор "safe", если хоть одно поле final - у нас hb после //инициализации
        this.data = new int[]{1, 0}; 
        this.data[1] = 2; 
    }

    static App instance;
    public static void main(String[] args) {
        new Thread(new Runnable() {
            public void run() {
                instance = new App(); // dirty write
            }
        }).start();

        while (instance == null) {/*NOP*/} //dirty read, здесь вероятно будет бесконечный цикл
        System.out.println(Arrays.toString(instance.data)); // здесь hb чтение поля и инициализации в конструкторе, {1, 2} если дойдет до сюда
    }
}



Код: java
1.
this.data = new int[]{1, 0};  

понятно, что это final поле и то, что тут установлено будет видно, если мы получили ссылку на instance != null


а вот
Код: java
1.
  this.data[1] = 2; 



как к этому относиться? оно к тому же установлено после присвоения ссылки.
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39396100
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
no56892,

или магия freeze action всё сделает?
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39396750
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,
Там вроде если хотя бы одно поле final, то в конец конструктора автоматически добавляется шняга подобная записи в волатайл (мембар или хз как правильно, сброс в оперативку сразу кароче условно), за исключением, что запись в волатайл создает hb, а final "ограниченное" hb, т.е. другие потоки увидят все, что произошло в конструкторе, но не гарантированно увидят то, что было до создания объекта.
https://shipilev.net/blog/2014/all-fields-are-final/
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39396767
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кароче:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class B {
  public int x;
}

class A {
 private final B bRef;
 public A() {
    bRef = new B();
    bRef.x = 10; // и это тоже safe - увидят все
 } 
}


Правдо следует сказать, что в JLS есть пример:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
class FinalFieldExample {
    final int x;
    int y;
    static FinalFieldExample f;
    public FinalFieldExample() {
      x = 3;
      y = 4;
    }

    static void writer() {
       f = new FinalFieldExample();
    }

   static void reader() {
     if (f != null) {
       int i = f.x; // x is guaranteed to be 3
       int j = f.y; // y can have any value 
     }
   }
}


Т.е. это гарантии JVM, однако в предыдущем посте я писал про то, что если хотя бы одно поле final - то вообще все действия в конструкторе видны. Это я взял вот отсюда:
https://shipilev.net/blog/2014/safe-public-construction/#_safe_publication
Т.е. это по факту так, но в JMM не гарантируется, вывод - final поля видны после инициализации, а также видны все действия с final полями в конструкторе если строго по JMM и не залипать на текущее положение дел. Вроде все :).
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39396793
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
class B {
 public B() {
   Main.flag = true;
 }
}

class A {
 final B b = new B();
}

//
static boolean flag = false;

Thread1:
while(!Main.flag) {}
System.out.println("we are here LOL");

Thread2:
new A();


кто там говорил про volatile?)))
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39396812
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Кстати:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
class B {
 public B() {
   Main.flag = true;
 }
}

class A {
 final B b = new B();
}

//
static boolean flag = false;

Thread1:
while(!Main.flag) {}
System.out.println("we are here LOL");

Thread2:
new A();


кто там говорил про volatile?)))
Беру свои слова обратно, это не работает)
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Изучение многопоточности в Java
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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