2010-02-20 6 views
1

Где я могу найти пример асинхронного программирования с использованием Java? Я заинтересован в поиске шаблонов в асинхронном программировании для создания приложений, которые обеспечивают отзывчивость (предотвращая зависание приложений и прекращение реагирования на пользовательские входные и серверные приложения, которые не отвечают на запросы клиентов своевременно) и масштабируемость.Асинхронное программирование с использованием Java

В частности, будет полезно увидеть образец, который выполняет операции ввода-вывода (такие как чтение/запись файлов, веб-запросы и запросы к базе данных), а также имеет большую обработку процессора, например, веб-страница.

Каковы библиотеки Java, которые могут помочь определить, когда реакция реагирования непредсказуема - поскольку поток приложения выполняет запросы ввода-вывода, приложение в основном отказывается от управления обработкой потока на устройстве ввода-вывода (a жесткий диск, сеть или что-то еще)

ответ

2

В графическом интерфейсе вы можете использовать потоки для выполнения фоновых задач.

Java поддерживает неблокирующий ввод-вывод в новом API ввода-вывода (NIO).

Если ваш вопрос более ориентирован на архитектуру, в этой книге предлагается углубленное обсуждение асинхронных шаблонов: Шаблоны архитектуры корпоративного приложения, автор Martin Fowler.

+0

Спасибо за это ... Параллелизм/Мартин Фаулер и Дэвид Райс глава nice..but больше к вопросам базы данных ориентированных обсуждавшихся .. – iceman

0

Каковы библиотеки Java, которые могут помочь в определении того, когда реакция реагирования непредсказуема - поскольку поток приложения выполняет запросы ввода-вывода, приложение в основном отказывается от управления обработкой потока к устройству ввода-вывода (жесткий диск, сеть или что-то еще)

Если вы правильно поняли, вы просите какую-либо библиотеку, которая исследует другие потоки, чтобы определить, заблокированы ли они в вызовах ввода/вывода.

Я не думаю, что это возможно в стандартной JVM. Более того, я не думаю, что этого было бы достаточно, чтобы гарантировать «отзывчивость».

+0

да-как на самом деле: знать блокирующие calls..and затем библиотеки, которые позволяют асинхронный ввод-вывод и обрабатывать несколько модулей для одновременного запуска – iceman

+0

. Я хотел бы определить, когда реакция реагирования непредсказуема, из основного потока, так что я могу решить, как обращаться с ней из программы – iceman

0

Если вы используете какой-то операции ввода/вывода (например, читать на InputStream, который может блокировать) вы положили его в резьбу и самым простым решением является использование присоединиться на резьбе на данную сумму:

MyThread myThread = new MyThread(); 
myThread.start(); 
myThread.join(10000); 

Это соединение будет ждать почти 10 секунд. После этого вы можете просто игнорировать поток, ... Вы также можете использовать Decorator pattern. Вы можете прочитать далее here.

Смежные вопросы