1. Програмування потоків (6 годин, 10 балів)

Теоретичні відомості

1. Брюс Эккель «Философия Java» (4-е полное издание) , глава 21

https://lyapidov.ru/bruce-eckel-thinking-in-java-4th-edition/

http://ebooks.znu.edu.ua/files/comp_books1/cd0/Thinking_in_Java_4th_Edition_RUS.djvu

http://ebooks.znu.edu.ua/files/comp.books/2007/gd/ThinkingJava/SimpleContents.html


  • 2. Шилдт Герберт. Java 8. Полное руководство. 9-е издание. Главы 11 и 28

  • http://ebooks.znu.edu.ua/files/comp.books/PDF-Docs/java_2.pdf

  • 3. Синхронизация потоков, блокировка объекта и блокировка класса
  • http://info.javarush.ru/CynepHy6/2014/10/27/%D0%A1%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%B2-%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0-%D0%B8-%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0.html

  • 4 "Множественные нити процессов" , конспект лекції
  • http://sites.znu.edu.ua/javaprog/lect/1133.ukr.html

  • Завдання
  • 1) Реалізувати кілька потоків та виконати їх засобами Thread.start().
    Продемонструвати перегони = потоки працюють із різною швидкістю.

    2) Реалізувати кілька потоків та виконати їх засобами ExecutorService
    https://winterbe.com/posts/2015/04/07/java8-concurrency-tutorial-thread-executor-examples/
    Виконати 20 потоків через ExecutorService, який дозволяє виконувати 5 потоків одночасно.
    Порівняти з (1)

    3) Реалізувати пересилку повідомлень між двома потоками з використанням wait() i notify()

    4) Реалізувати пересилку повідомлень між двома потоками з використанням BlockingQueue

  • 5) Реалізувати синхронізацію потоків засобами ReentrantLock|ReadWriteLock| StampedLock | Semaphores
  • https://www.journaldev.com/2377/java-lock-example-reentrantlock
  • https://winterbe.com/posts/2015/04/30/java8-concurrency-tutorial-synchronized-locks-examples/
  • 6) Продемонструвати Deadlock