Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GoslingJava2.doc
Скачиваний:
139
Добавлен:
23.02.2016
Размер:
2.39 Mб
Скачать

9.14. Отладка потоков

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

public String toString()

Возвращает строковое описание потока, включающее его имя, приоритет и имя группы.

public String countStackFrames()

Возвращает количество кадров стека в потоке.

public static void dumpStack()

Выводит в System.out содержание стека для текущего потока.

Также существует ряд отладочных средств для отслеживания состояния группы потоков. Следующие методы вызываются для объектов ThreadGroup и выдают информацию об их состоянии:

public String toString()

Возвращает строковое описание группы, включающее ее имя и приоритет.

public synchronized void list()

Выводит в System.out список содержимого группы и ее подгрупп.

Глава 10 пакеты

Библиотека — это арсенал свободы. Источник неизвестен

Под понятием “пакет” подразумевается объединение взаимосвязанных классов, интерфейсов и подпакетов. Концепция пакета оказывается полезной по нескольким причинам:

  • Пакеты позволяют группировать родственные интерфейсы и классы.

  • В интерфейсах и классах, входящих в пакет, могут использоваться популярные имена (вроде get или put), которые имеют смысл в данном контексте, но конфликтуют с теми же именами в других пакетах.

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

Давайте рассмотрим пример пакета для нашего класса атрибутов, использованного в предыдущих главах. Назовем пакет attr. Каждый исходный файл, классы и интерфейсы которого принадлежат пакету attr, должен указывать на свою принадлежность к пакету объявлением package:

package attr;

Тем самым объявляется, что все классы и интерфейсы, определенные в этом исходном файле, являются частью пакета attr. Объявление package должно находиться в самом начале файла, до любых объявлений классов или интерфейсов; в файле может присутствовать всего одно объявление package. Имя пакета является неявным префиксом для всех имен типов, включенных в пакет.

Если фрагменту программы вне пакета понадобится обратиться к типам, входящим в пакет, у него имеется две возможности. Первая— указывать перед каждым именем типа префикс (имя пакета). Такой вариант будет вполне разумен, если вам приходится иметь дело всего с несколькими членами пакета.

Другая возможность доступа к типам пакета заключается в частичном или полном импортировании пакета. Программист, который захочет воспользоваться пакетом attr, может вставить следующую строку в начало своего исходного файла (после своего объявления package, но перед всем прочим):

import attr.*;

После этого он может обращаться к типам пакета просто по имени— например, Attributed. Пакет неявно импортирует сам себя, так что все, что определено в нем, становится доступным для всех остальных типов пакета.

Механизмы package и import помогают программисту предотвращать потенциальные конфликты имен. Если в пакете, предназначенном для других целей (скажем, лингвистических), тоже встретится класс с именем Attributed, предназначенный для хранения языковых атрибутов, то у программиста, пожелавшего использовать оба пакета в одном файле, имеется несколько вариантов:

  • Обращаться к типам по их полным именам — например, attr.Attributed и lingua.Attributed.

  • Импортировать attr.Attributed или attr.*, после чего использовать простое имя Attributed вместо attr.Attributed и полное имя lingua.Attributed.

  • Сделать обратное — импортировать lingua.Attributed или lingua.*, после чего использовать простое имя Attributed вместо lingua. Attributed и полное имя attr.Attributed.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]