Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Завдання: ConcurrentMap | Синхронізовані Колекції
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Багатопотоковість у Java

bookЗавдання: ConcurrentMap

Завдання:

Реалізація багатопотокової системи обліку відвідувань сайту.

Опис:

Необхідно створити програму для обліку кількості відвідувань різних сторінок сайту. Програма повинна коректно працювати у багатопотоковому середовищі, де декілька потоків можуть одночасно збільшувати лічильники відвідувань для різних сторінок.

Вимоги:

  • Використання ConcurrentHashMap для зберігання даних про відвідування сторінок;
  • Реалізація методу, який збільшує лічильник відвідувань для заданої сторінки. incrementVisit();
  • Реалізація методу, який повертає поточний лічильник відвідувань для заданої сторінки. getVisitCount();
  • Створення декількох потоків, які будуть одночасно збільшувати лічильники відвідувань. (Це реалізовано у класі Main, необхідно розібратися, що там відбувається).

Підказки:

  • Використання ConcurrentHashMap для зберігання даних, де ключем є URL сторінки, а значенням — лічильник відвідувань;
  • Використання методів compute() або merge() для атомарного оновлення лічильників у ConcurrentHashMap.

Потрібно реалізувати методи у класі PageVisitCounterImpl, а потім запустити тести у класі PageVisitCounterTest.

Після успішного виконання завдання всі тести мають пройти.

Note
Примітка

Після того як усе зроблено правильно, можна спробувати змінити рядок, де оголошується ConcurrentMap у класі PageVisitCounterImpl, і подивитися, що станеться.

Тобто потрібно замінити цей рядок тут на реалізацію ConcurrentMap.

Main.java

Main.java

copy
1
private final ConcurrentMap<String, Integer> visitCounts = new ConcurrentHashMap<>();

У цьому завданні використовується реалізація звичайного Map

Main.java

Main.java

copy
1
private final Map<String, Integer> visitCounts = new HashMap<>();
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 6

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

bookЗавдання: ConcurrentMap

Свайпніть щоб показати меню

Завдання:

Реалізація багатопотокової системи обліку відвідувань сайту.

Опис:

Необхідно створити програму для обліку кількості відвідувань різних сторінок сайту. Програма повинна коректно працювати у багатопотоковому середовищі, де декілька потоків можуть одночасно збільшувати лічильники відвідувань для різних сторінок.

Вимоги:

  • Використання ConcurrentHashMap для зберігання даних про відвідування сторінок;
  • Реалізація методу, який збільшує лічильник відвідувань для заданої сторінки. incrementVisit();
  • Реалізація методу, який повертає поточний лічильник відвідувань для заданої сторінки. getVisitCount();
  • Створення декількох потоків, які будуть одночасно збільшувати лічильники відвідувань. (Це реалізовано у класі Main, необхідно розібратися, що там відбувається).

Підказки:

  • Використання ConcurrentHashMap для зберігання даних, де ключем є URL сторінки, а значенням — лічильник відвідувань;
  • Використання методів compute() або merge() для атомарного оновлення лічильників у ConcurrentHashMap.

Потрібно реалізувати методи у класі PageVisitCounterImpl, а потім запустити тести у класі PageVisitCounterTest.

Після успішного виконання завдання всі тести мають пройти.

Note
Примітка

Після того як усе зроблено правильно, можна спробувати змінити рядок, де оголошується ConcurrentMap у класі PageVisitCounterImpl, і подивитися, що станеться.

Тобто потрібно замінити цей рядок тут на реалізацію ConcurrentMap.

Main.java

Main.java

copy
1
private final ConcurrentMap<String, Integer> visitCounts = new ConcurrentHashMap<>();

У цьому завданні використовується реалізація звичайного Map

Main.java

Main.java

copy
1
private final Map<String, Integer> visitCounts = new HashMap<>();
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 6
some-alt