/ / Як потокова безпечна програма може містити класи, які не є потокобезпечними? - java, багатопоточність, паралельність

Як безпечна програма може містити класи, які не є безпечними для потоку? - java, багатопоточність, паралельність

Я тільки почав читати Паралельність Java на практиці, з сторінки 17:

Ми використовували терміни "безпечний потік" і"Безпечна нитка" майже взаємозамінні. Це потокобезпечна програма, яка є такою побудовані виключно з потокобезпечних класів? Не обов'язково - a Програма, яка складається виключно з потокобезпечних класів, може не бути безпечний потік, і безпечна для потоків програма може містити класи, які є не є потокобезпечним.

  • Як безпечна програма з нитками може містити класи, які не захищені потоками? додатковий приклад коду буде дійсно оцінений.

Відповіді:

5 за відповідь № 1

Є два основних випадки, де це можливо:

  1. Об'єкти, які не захищені потоками, обмежуються окремими потоками.

  2. Доступ до спільних об'єктів, що не є безпечними для потоків, координується зовні зовнішніми потоками. Надзвичайно спрощений приклад: синхронізуючи весь доступ з

        synchronized( sharedObject ) {
    sharedObject.access();
    }
    

1 для відповіді № 2

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