Друкарня від WE.UA

Java. Чому локи потрібно тримати якомога менший час?

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

Реагування на “зовнішні“ події. Коли потоки не чекають довго на доступ до ресурсу через короткі блокування, вони можуть швидше реагувати на зовнішні події. Це може бути критично важливо для систем реального часу або для тих, які мають високі вимоги до часу відгуку(веб-сервери — обробка запитів, бази даних).

Зменшення ризику взаємоблокування. Тримання кількох блокувань одночасно або протягом тривалого часу збільшує ризик взаємоблокувань. Короткі інтервали блокувань мінімізують часове “вікно“, протягом якого інший потік може спробувати отримати блокування в іншому порядку та викликати взаємоблокування.

Прогнозованість та легший дебаг. Системи з довгою тривалістю блокування можуть проявляти непередбачувану поведінку, оскільки важко визначити послідовність операцій у різних потоках(тримання локу “розсинхронізовує/віддаляє“ роботу декількох потоків один від одного). Зберігаючи короткий час блокувань, можна зробити поведінку системи більш прогнозованою та легше її проаналізувати.

Інтерфейс: У додатках з графічним інтерфейсом, довгі блокування можуть призвести до "зависання"(пост про це) або затримок відгуку, що може погіршити враження від користування додатком.


public class Main {
    public static void main(String[] args) throws InterruptedException {
        Thread.sleep(5_000);

        final Object lock = new Object();
        MyThread t1 = new MyThread("My Thread 1", lock);
        MyThread t2 = new MyThread("My Thread 2", lock);

        Thread.sleep(1000);
        System.out.println(t2.getState());
        System.out.println(t1.getState());
    }
}

class MyThread extends Thread {
    private final Object lock;

    public MyThread(String name, Object lock) {
        setName(name);
        this.lock = lock;
        start();
    }

    @Override
    public void run() {
        synchronized (lock) {
            System.out.println("Hello from thread " + getName());
            while (true);
            // довгі обрахунки
        }
        // інша бізнес логіка яку необхідно виконати
    }
}
Результат запуску програми в консолі
Java process profiling. VisualVM

В профайлері бачимо наших два потоки — My Thread 1 і My Thread 2.
Оскільки перший потік запускається першим, він займає лок, другий потік, чекає на цьому лоці нескінченний час і переходить в заблокований стан. Через блокування, код потоку не буде виконано процесором — не буде використано процесорного часу, навідміну від першого потоку.

Статті про вітчизняний бізнес та цікавих людей:

  • Вітаємо з Різдвом Христовим!

    Друкарня та платформа WE.UA вітають всіх наших читачів та авторів зі світлим святом Різдва! Зичимо всім українцям довгожданого миру, міцного здоровʼя, злагоди, родинного затишку та втілення всього доброго і прекрасного, чого вам побажали колядники!

    Теми цього довгочиту:

    Різдво
  • Каблучки – прикраси, які варто купувати

    Ювелірні вироби – це не тільки спосіб витратити гроші, але і зробити вигідні інвестиції. Бо вартість ювелірних виробів з кожним роком тільки зростає. Тому купуючи стильні прикраси, ви вигідно вкладаєте кошти.

    Теми цього довгочиту:

    Як Вибрати Каблучку
  • П'ять помилок у виборі домашнього текстилю, які псують комфорт сну

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

    Теми цього довгочиту:

    Домашній Текстиль
  • Як знайти житло в Києві

    Переїжджаєте до Києва і шукаєте житло? Дізнайтеся, як орендувати чи купити квартиру, перевірити власника та знайти варіанти, про які зазвичай не говорять.

    Теми цього довгочиту:

    Агентство Нерухомості
  • Як заохотити дитину до читання?

    Як залучити до читання сучасну молодь - поради та факти. Користь читання для дітей - основні переваги. Розвиток дітей - це наше майбутнє.

    Теми цього довгочиту:

    Читання
Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Oleksandr Klymenko
Oleksandr Klymenko@overpathz

Java Software Engineer

7.5KПрочитань
1Автори
95Читачі
На Друкарні з 19 квітня

Більше від автора

Це також може зацікавити:

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити: