Чтение онлайн

ЖАНРЫ

Философия Java3

Эккель Брюс

Шрифт:

Пожалуй, основные трудности с потоками возникают тогда, когда несколько потоков одновременно пытаются использовать один и тот же ресурс — например, память объекта, и вы должны сделать так, чтобы этого ни в коем случае не произошло. Для этого нужно разумно использовать ключевое слово 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

внутренний класс (продолжение)

наследование от внутренних классов, 272 обратный вызов, 264

обращение к объекту внешнего класса, 248

переопределение, 273

права на доступ, 246

системы управления, 266

скрытая ссылка на объект объемлющего

класса, 248 статические внутренние классы, 258 возобновление, 314 восходящее преобразование, 186, 199 и интерфейс, 227

г

генераторы, 466

графический интерфейс пользователя, 266

Д

деструктор, 179

динамический вызов instanceof, 369 динамическое определение типов (RTTI), 219 неверное использование, 394

объект Class, 354 пример с фигурами, 352 рефлексия, 376 динамическое связывание, 198, 202 доклеты, 65

долговременное хранение и предпочтения, 553 объектов, 548 доступ

в пределах пакета, 160 модификатор private, 152

з

завершающие действия, 132 загрузка

классов, 196 файлов .class, 156 замыкание, 264 запуск программы на Java, 63

и

инициализация, 210

Static-инициализация, 196 базового класса, 174 и загрузка классов, 195 и наследование, 195 инициализация для экземпляра, 145 инициализация с помощью

конструктора, 116 инициализация членов класса в точке

определения, 138 инициализация экземпляра, 255 отложенная, 171

инициализация (продолжение)

порядок инициализации, 140, 216 членов класса, 171 инкапсуляция, 164 инструмент

JAR, 154, 157, 534 интерфейс

Externalizable, 541

альтернативный подход, 545 FilenameFilter, 484 Serializable, 536, 541, 544, 545, 552 вложенные интерфейсы, 239 и наследование, 233 инициализация полей интерфейса, 238 интерфейс базового класса, 205 столкновения имен, 235 интерфейс объекта, 21 исключение

ClassCastException, 362 ClassNotFoundException, 540 IllegalMonitorStateException, 599 IOException, 507, 508 NullPointerException, 329 RuntimeException, 329, 348 UnsupportedOperationException, 520 блок try, 312

возбуждение исключения, 311 возобновление и прерывание, 314 защищенная секция, 312 и конструкторы, 339 и наследование, 336, 343 идентификация, 343 контролируемое, 320 неконтролируемое, 329 обработка, 310 обработчик, 313 перехват, 312, 320 повторное возбуждение, 322 потеря, 335

предложение finally, 330 рекомендации по использованию, 350 создание собственных, 314 спецификации, 319 тип Error, 328 тип Exception, 328 исключения, 38

контролируемые генерация, 350 заворачивание, 350 исключительная ситуация, 310 итератор, 288

методы интерфейса Iterator, 288

к

каналы (pipes), 490, 505, 601 каналы nio (channels), 510 каркас приложения, 266

карта, 280 класс

Adler32, 532

BufferedlnputStream, 493 BufferedOutputStream, 494 BufferedReader, 496 BufferedWriter, 496 ByteArraylnputStream, 490, 500 ByteArrayOutputStream, 491 ByteBuffer, 510 Channels, 510 CharArrayReader, 495 CharArrayWriter, 495 CharBuffer, 513 Charset, 514

CheckedlnputStream, 531 Checked OutputStream, 531 Class, 354, 550 CRC32, 532 Daemon, 567

DatalnputStream, 492, 496, 499, 502 DataOutputStream, 494, 497, 502 DeflaterOutputStream, 531 File, 484, 497 FileChannel, 510 FilelnputReader, 498 FilelnputStream, 490 FileOutputStream, 491 FileReader, 495 FileWriter, 495, 500 FilterlnputStream, 490 FilterOutputStream, 491 FilterReader, 496 FilterWriter, 496 GZIPInputStream, 531 GZIPOutputStream, 531 InflaterlnputStream, 531 InputStream, 489 InputStreamReader, 495 LineNumberlnputStream, 493 LineNumberReader, 496 Object, 172, 598 ObjectOutputStream, 537 OutputStream, 489, 491 OutputStream Writer, 495 PipedlnputStream, 490 Piped OutputStream, 491 PipedReader, 495, 601 PipedWriter, 495, 601 PrintStream, 493, 494 PrintWriter, 496, 500 PushbacklnputStream, 493 PushBackReader, 496 RandomAccessFile, 497, 503 Reader, 489, 494, 495 RuntimeException, 348 SequencelnputStream, 490, 497

Поделиться с друзьями: