Авторские права

Брюс Эккель - Философия Java3

Здесь можно скачать бесплатно "Брюс Эккель - Философия Java3" в формате fb2, epub, txt, doc, pdf. Жанр: Прочая старинная литература. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Брюс Эккель - Философия Java3
Рейтинг:
Название:
Философия Java3
Автор:
Издательство:
неизвестно
Год:
неизвестен
ISBN:
нет данных
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Философия Java3"

Описание и краткое содержание "Философия Java3" читать бесплатно онлайн.








System.out.print(customers +"{");

for(Teller teller ■ workingTellers)

System.out.print(teller.shortString() + " "); System.out.printIn("}"); } продолжение &

} catchdnterruptedException е) {

System.out.printin(this + "прерван");

}

System.out println(this + "завершается");

}

public String toStringO { return "TellerManager "; }

}

public class BankTellerSimulation {

static final int MAX_LINE_SIZE = 50;

static final int ADJUSTMENT_PERIOD = 1000;

public static void main(String[] args) throws exception {

ExecutorService exec = Executors.newCachedThreadPoolО; // Если очередь слишком длинна, клиенты уходят: CustomerLine customers =

new CustomerLi ne(MAX_LINE_SIZE); exec.execute(new CustomerGenerator(customers)); // TellerManager добавляет и убирает кассиров // по мере необходимости: exec.execute(new TellerManager(

exec, customers. ADJUSTMENT_PERIOD)); if(args.length > 0) // Необязательный аргумент

Ti meUni t.SECONDS.s1eep(new Integer(args[0])).

else {

System.out.printIn("Press 'Enter' to quit"); System.in.readО;

}

exec.shutdownNowO;

}

} /* Output:

[429][200][207] { K0 K1 } [861][258][140][322] { K0 K1 } [575][342][804][826][896][984] { КО K1 K2 } [984][810][141][12][689][992][976][368][395][354] { КО K1 K2 КЗ } Teller 2 прерван Teller 2 завершается Teller 1 прерван Teller 1 завершается TellerManager прерван TellerManager завершается Teller 3 прерван Teller 3 завершаетсяч Teller 0 прерван Teller 0 завершается CustomerGenerator прерван CustomerGenerator завершается *///:-

Объекты Customer очень просты; они содержат только поле данных final int. Так как эти объекты никогда не изменяют своего состояния, они являются объектами, доступными только для чтения, и поэтому требуют синхронизации или использования volatile. Вдобавок каждая задача Teller удаляет из очереди ввода только один объект Customer и работает с ним до завершения, поэтому задачи все равно будут работать с Customer последовательно.

Класс CustomerLine представляет собой общую очередь, в которой клиенты ожидают обслуживания. Он реализован в виде очереди ArrayBlockingQueue с методом toString(), который выводит результаты в желаемом формате.

Генератор CustomerGenerator присоединяется к CustomerLine и ставит объекты Customer в очередь со случайными интервалами.

Teller извлекает клиентов Customer из CustomerLine и обрабатывает их последовательно, подсчитывая количество клиентов, обслуженных за текущую смену. Если клиентов не хватает, его можно перевести на другую работу (doSome-thingElse()), а при появлении большого количества клиентов — снова вернуть на обслуживание очереди методом serveCustomerLine(). Чтобы приказать следующему кассиру вернуться к очереди, метод compareTo() проверяет количество обслуженных клиентов, чтобы приоритетная очередь автоматически ставила в начало кассира, работавшего меньше других.

Вся основная деятельность выполняется в TellerManager. Этот класс следит за всеми кассирами и за тем, что происходит с клиентами. Одна из интересных особенностей данной имитации заключается в том, что она пытается подобрать оптимальное количество кассиров для заданного потока покупателей. Пример встречается в методе adjustTellerNumber() — управляющей системе для надежной, стабильной регулировки количества кассиров. У всех управляющих систем в той или иной мере присутствуют проблемы со стабильностью; слишком быстрая реакция на изменения снижает стабильность, а слишком медленная переводит систему в одно из крайних состояний.

Резюме

В этой главе я постарался изложить основы многопоточного программирования с использованием потоков Java. Прочитав ее, читатель должен понять следующее:

1. Программу можно разделить на несколько независимых задач.

2. Необходимо заранее предусмотреть всевозможные проблемы, возникающие при завершении задач.

3. Задачи, работающие с общими ресурсами, могут мешать друг другу. Основным средством предотвращения конфликтов является блокировка.

4. В неаккуратно спроектированных многозадачных системах возможны взаимные блокировки.

Очень важно понимать, когда рационально использовать параллельное выполнение, а когда этого делать не стоит. Основные причины для его использования:

• управление несколькими подзадачами, одновременное выполнение которых позволяет эффективнее распоряжаться ресурсами компьютера (включая возможность незаметного распределения этих задач по нескольким процессорам);

• улучшенная организация кода;

• удобство для пользователя.

Классический пример распределения ресурсов — использование процессора во время ожидания завершения операций ввода/вывода. Классический пример чуткого пользовательского интерфейса — отслеживание нажатий кнопки «Прервать» во время продолжительного процесса загрузки.

Дополнительным преимуществом потоков является то, что они заменяют «тяжелое» переключение контекста процессов (порядка 1 ООО и более инструкций) «легким» переключением контекста выполнения (около 100 инструкций). Так как все потоки процесса разделяют одно и то же пространство памяти, легкое переключение затрагивает только выполнение программы и локальные переменные. С другой стороны, чередование процессов — тяжелое переключение контекста — требует обновления всего пространства памяти.

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

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

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

наследование от внутренних классов, 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


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "Философия Java3"

Книги похожие на "Философия Java3" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Брюс Эккель

Брюс Эккель - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Брюс Эккель - Философия Java3"

Отзывы читателей о книге "Философия Java3", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.