Archive
Синхронизация потоков
...Клетчатый специалист-хормейстер проорал:
– До-ми-соль-до! – вытащил наиболее застенчивых из-за шкафов, где они пытались спастись от пения, Косарчуку сказал, что у него абсолютный слух, заныл, заскулил, просил уважить старого регента-певуна, стучал камертоном по пальцам, умоляя грянуть "Славное море".
Грянули. И славно грянули. Клетчатый, действительно, понимал свое дело...
М.А. Булгаков, "Мастер и Маргарита"
Вам приходилось когда-нибудь дирижировать оркестром? Или хотя бы хором? Второе мне довелось. Тридцать человек, два голоса. И пусть каждый знает свою партию наизусть – сделать так, чтобы пятнадцать человек первого голоса и пятнадцать человек второго пели в унисон, очень сложно. А уж чтобы не сбивались и каждый голос вел свою партию – и вовсе задача запредельная. Вот так я впервые в жизни столкнулся с синхронизацией.
В современном, многопоточном, ПО проблемы синхронизации встают не менее остро. От их решения зависит очень и очень много. Между тем, далеко не все знают, что, как, и, самое главное, зачем делать. Вот этим что, как и зачем применительно к Java и посвящена эта статья.
Мы коснемся следующих тем:
- Введение
- Потоки в Java
- Управление выполнением потоков
- Мониторы
- Взаимные блокировки
- Синхронизация данных
- Приемы синхронизации
- Системная синхронизация с использованием
wait/notify - Системная синхронизация с использованием
join - Программная синхронизация – шаблоны и библиотеки
- Системная синхронизация с использованием
- Синхронизация на практике – Java SE и Java EE
- Синхронизация коллекций
- Синхронизация GUI
- Синхронизация сервлетов
Итак, поехали.
Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated?
Why is Thread.stop deprecated?
Because it is inherently unsafe. Stopping a thread causes it to unlock all the monitors that it has locked. (The monitors are unlocked as the ThreadDeath exception propagates up the stack.) If any of the objects previously protected by these monitors were in an inconsistent state, other threads may now view these objects in an inconsistent state. Such objects are said to be damaged. When threads operate on damaged objects, arbitrary behavior can result. This behavior may be subtle and difficult to detect, or it may be pronounced. Unlike other unchecked exceptions, ThreadDeath kills threads silently; thus, the user has no warning that his program may be corrupted. The corruption can manifest itself at any time after the actual damage occurs, even hours or days in the future.
Threading in C#: Getting Started
Overview and Concepts
C# supports parallel execution of code through multithreading. A thread is an independent execution path, able to run simultaneously with other threads.
A C# program starts in a single thread created automatically by the CLR and operating system (the "main" thread), and is made multi-threaded by creating additional threads. Here's a simple example and its output:
All examples assume the following namespaces are imported, unless otherwise specified:
using System;
using System.Threading;