×
Traktatov.net » Философия Java » Читать онлайн
Страница 387 из 395 Настройки

Основные недостатки многозадачности:

1. Замедление программы, связанное с ожиданием освобождения блокированных ресурсов.

2. Дополнительная нагрузка на процессор для управления потоками.

3. Совершенно ненужная сложность, являющаяся следствием неудачных решений при проектировании программы.

4. Аномальные ситуации: взаимные блокировки, конфликты доступа, гонки и т. д.

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

Пожалуй, основные трудности с потоками возникают тогда, когда несколько потоков одновременно пытаются использовать один и тот же ресурс — например, память объекта, и вы должны сделать так, чтобы этого ни в коем случае не произошло. Для этого нужно разумно использовать ключевое слово synchronized — полезный инструмент языка, который тем не менее необходимо хорошо понимать (без этого в программе может незаметно возникнуть опасность взаимной блокировки).

Вдобавок многозадачное программирование сродни искусству. Язык Java существует для того, чтобы вы могли свободно создавать столько объектов, сколько вам нужно для решения вашей задачи — по крайней мере, в теории это так. (Например, создание миллионов объектов для проведения проекционно-разностного анализа вряд ли будет иметь смысл в Java.) Однако оказывается, что количество потоков упирается в определенный «потолок», так как после превышения этой-границы потоки становятся неподатливыми. Это критическое число трудно определить, зачастую оно зависит от операционной системы и виртуальной машины Java, значение может находиться где-то в районе сотни, а может исчисляться тысячами. Если для решения своей задачи вам требуется небольшая группа потоков, это ограничение не актуально, но при разработке больших программ оно может создать затруднения.

Алфавитный указатель

А

Arrays, класс, 465

С

CGI, 41

CountDownLatch, класс, 607 CyclicBarrier, класс, 609

F

foreach, синтаксис, 105

н

HTML, 41

3

Java, 48

N

new, ключевое слово, 49

Р

Python, 42

S

Simula, 20

SmallTalk, 19

static, ключевое слово, 60

и

UML, 24

А

автоматические переменные, 36 ассоциативный массив, 285 атомарные операции, 585

Б

базовые классы, 25 базовый класс, 172, 201 инициализация, 174 конструктор, 210 безымянный внутренний класс, 251, 485 булева алгебра, 84 буферы nio, 510

быстрая разработка приложений (RAD), 376

в

ввод/вывод, 489

библиотека сжатия, 531 и многозадачность, 601 интернационализация, 495 канал (pipe), 490 класс File, 484 классы библиотеки, 483 переименование файлов, 489 перенаправление стандартного

ввода/вывода, 509 поток, 489

свойства файлов, 487 символы Юникода, 495 создание каталогов, 487 список каталогов, 484 стандартные потоки, 507 типичное использование, 498 управление сериализацией, 540 взаимная блокировка, 602 взаимное исключение, mutex, 581 взаимозаменяемость, 19 взаимосвязь

«имеет», 185 «является», 185 внутренний класс, 245

безымянный внутренний класс, 485 в методах и областях действия, 251 вложение в область действия, 252 замыкание, 264