1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-thinking-in-java-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
14.7 练习.md 7.1 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 11.03.2025 09:15 d56454c

Упражнение 14.7

(1) Наследуйте класс от Thread, переопределяя метод run(). Внутри run(), выведите сообщение, затем вызовите sleep(). Повторите эти действия трижды, а затем вернитесь из run(). В конструкторе включите сообщение о запуске, а также переопределите finalize(), чтобы вывести сообщение о завершении. Создайте независимый класс потока, который внутри run() вызывает System.gc() и System.runFinalization(), а также выводит сообщение о успешном выполнении этих операций. Создайте несколько потоков каждого типа и запустите их, чтобы посмотреть, что произойдет.

(2) Измените Counter2.java, сделав поток внутренним классом и устранив необходимость явного хранения ссылки на объект Counter2.

( Yöntem 3 ) Измените Sharing2.java, заменив синхронизацию всего метода run() в классе TwoCounter на использование синхронизированного блока внутри этого метода.

(4) Создайте два подкласса Thread. Первый подкласс должен иметь метод run(), который начинается первым и захватывает ссылку на второй объект Thread, после чего вызывает wait(). Второй подкласс должен вызывать метод modifyAll() для первого потока через несколько секунд, позволяя ему вывести сообщение.

(5) В Counter5.java внутри Ticker2, удалите вызов yield() и объясните результат. Замените его вызовом sleep() и снова объясните результат.


Исправлено:

  • Удалены лишние символы и пробелы.
  • Корректно оформлены пунктуационные знаки.
  • Переведено содержание, которое было на других языках.(6) В ThreadGroup1.java, замените вызов sys.suspend() на вызов wait() для группы потоков, заставив её ждать две секунды. Для получения правильного результата необходимо получить объект групп потоков.

Здесь также следует обратить внимание на то, что вместо sys.suspend() используется метод wait().```markdown

Упражнение 14.7

(1) Наследуйте класс от Thread, переопределив метод run(). Внутри run(), выведите сообщение, затем вызовите sleep(). Повторите эти действия три раза, а затем вернитесь из run(). В конструкторе включите сообщение о запуске, а также переопределите finalize(), чтобы вывести сообщение о завершении. Создайте независимый класс потока, который внутри run() вызывает System.gc() и System.runFinalization(), а также выводит сообщение о успешном выполнении этих операций. Создайте несколько потоков каждого типа и запустите их, чтобы посмотреть, что произойдет.

(2) Измените Counter2.java, сделав поток внутренним классом и устранив необходимость явного хранения ссылки на объект Counter2.

(3) Измените Sharing2.java, заменив синхронизацию всего метода run() в классе TwoCounter на использование синхронизированного блока внутри этого метода.

(4) Создайте два подкласса Thread. Первый подкласс должен иметь метод run(), который начинается первым и захватывает ссылку на второй объект Thread, после чего вызывает wait(). Второй подкласс должен вызывать метод modifyAll() для первого потока через несколько секунд, позволяя ему вывести сообщение.

(5) В Counter5.java внутри Ticker2, удалите вызов yield() и объясните результат. Замените его вызовом sleep() и снова объясните результат. ```(6) В ThreadGroup1.java, замените вызов `sys.suspend()` на вызов `wait()` для группы потоков, заставив её ждать две секунды. Для получения правильного результата необходимо получить объектный блок синхронизации.(7) Измените `Daemons.java`, добавив вызов `sleep()` вместо `readLine()` в методе `main()`. Экспериментируйте с различными временами ожидания, чтобы посмотреть, что происходит.

(8) Найдите пример GreenhouseControls.java из середины главы 7. Он состоит из трех файлов. В классе Event.java класс Event основан на мониторинге времени. Измените этот Event, сделав его потоком. Затем измените остальную часть дизайна, чтобы он мог корректно работать с новым, основанным на потоках Event.

(7) Измените `Daemons.java`, добавив вызов `sleep()` вместо `readLine()` в методе `main()`. Экспериментируйте с различными временами ожидания, чтобы посмотреть, что происходит.

(8) Найдите пример `GreenhouseControls.java` из середины главы 7. Он состоит из трёх файлов. В классе `Event.java` класс `Event` основан на мониторинге времени. Измените этот `Event`, сделав его потоком. Затем измените остальную часть дизайна, чтобы он мог корректно работать с новым, основанным на потоках `Event`.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-thinking-in-java-zh.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-thinking-in-java-zh.git
oschina-mirror
wizardforcel-thinking-in-java-zh
wizardforcel-thinking-in-java-zh
master