Java: поточная обработка методов и понятий

Ну, если кому-то интересно, ответ «да» и «нет».

Нет, вы не увидите свои заказы в веб-интерфейсе eParcel.

Но вы можете увидеть их через MyPost Business! Как-то два связаны, и вы просто должны убедиться, что вы выбрали тот же код местоположения, что и ваша система eParcel. Почему это так? Без понятия. Почта Австралии работает таинственным образом. Один из их техников предупредил меня об этом механизме.

Кроме того, вы всегда можете просто использовать API, чтобы получить список всех ожидающих пакетов и делать все, что вам нужно сделать на своей стороне.

6
задан Ande TURNER 10 October 2008 в 13:28
поделиться

4 ответа

Есть ли какие-либо API, которые Вы используете который поточная обработка помощи?

Вы имеете в виду независимо от java.util.concurrent? FunctionalJava получил некоторые конструкции, которые помогают в параллельном программировании, как описано в многослойном учебном руководстве, которое запускается здесь.

Вы использовали потоки способом, который не осмысляет как поток, являющийся процессом?

Да, до такой степени, что потоки не осмысляют вообще. Возьмите асинхронного бегуна задачи, например. Это использует потоки под покрытиями, но я не вижу их, и я не забочусь о них. Ими полностью управляет бегун задачи.

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

Агенты/Агенты являются распространенным способом сделать это. Агент похож на поток, который имеет глыбу состояния, и затем можно отправить ему некоторый код и сказать, "делают это к состоянию, когда у Вас есть время" или что-то вдоль тех строк.

14
ответ дан 8 December 2019 в 04:32
поделиться

В первую очередь,

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

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

Java параллельные API

Java имел большое значение в создании параллельного программирования, максимально легкого для разработчиков. Для большинства случаев Вы будете видеть это java.util.concurrent имеет большинство абстракций, в которых Вы будете нуждаться:

  • Runnable интерфейс и Thread объект можно расшириться. Просто добавьте свой код, и у Вас есть поток, готовый работать
  • Хороший набор Executors: постоянный пул, динамический пул, запланированный, или что бы то ни было. Просто бросок a Runnable в нем и он делает остальных.
  • Semaphores и блокировки всех видов освобождают Вас от необходимости реализовать общие методы блокировки.
  • Встроенное wait() и notify() API для всех объектов.

Использование

Единственная вещь уехала, как разработчик программного обеспечения, необходимо удостовериться написание правильного кода. Значение Вас должно знать об опасных ситуациях, которым Вы могли бы выставлять себя:

  • Мертвая блокировка - ситуация, в которой два или больше потока ожидают на незаказанных ресурсах, представляя бесконечный цикл ожидания.
  • Динамическая взаимоблокировка - два или больше потока, которые вежливо пытаются уступить другому на совместно используемом ресурсе, но закончить тем, что не брали его (рассматривают двух человек в коридоре, приближающемся друг к другу и постоянно двигающемся вместе поперек),
  • Исчерпание ресурсов - единственный поток, поднимающий больше всего или весь единственный совместно используемый ресурс, таким образом лишая другие потоки от доступа до него.

Основной момент (или, когда использовать),

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

Если Вы ожидаете на IO/network/hardware-bound ресурсе, ДЕЙСТВИТЕЛЬНО породите поток на нем так, можно продолжить делать другой материал.

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

При использовании потоков удостоверьтесь, что Вы полностью рассмотрели риски и трижды проверили, что не пропустили исключительных ситуаций.

Полезные ресурсы (онлайн)

Самый быстрый способ войти в вещи состоит в том, чтобы сделать учебное руководство по параллелизму Sun. Кроме этого, получите хорошую книгу.

Удача :)

8
ответ дан 8 December 2019 в 04:32
поделиться

Параллелизм является глубокой и сложной темой для покрытия. Книги как Параллелизм Java на практике могут помочь.

См. Обзор Concurrency Utilities для API на поточной обработке. BlockingQueue <E> может быть полезным, например.

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

Посмотрите CountDownLatch

Помощь для синхронизации, которая позволяет одному или нескольким потокам ожидать до ряда операций, выполняемых в других потоках, завершается.

и CyclicBarrier для некоторого интересного поведения.

Помощь для синхронизации, которая позволяет ряд потоков всем, ожидает друг друга для достигания общей точки барьера.

Править: Я читаю Параллелизм Java на практике теперь. Это очень хорошо.

3
ответ дан 8 December 2019 в 04:32
поделиться

При использовании потоков я иногда визуализирую их как сплетение трех или более пространственных взаимосвязей между Объектами в Пространственном контексте.

Звучит сложно, например, как бы вы концептуализировали 600 потоков? Почему бы не подумать о них как о нескольких потоках выполнения, выполняющихся, по-видимому, одновременно.

Существуют ли какие-либо API-интерфейсы, которые вы используете для поддержки потоковой передачи?

Я предлагаю, что самые простые и прямые - это первые совпадения, которые вы найдете. http://www.google.co.uk/search?q=java+threads

Использовали ли вы потоки таким образом, который не концептуализируется как поток как процесс?

Поскольку потоки не являются процессы, я не могу сказать, что когда-либо думал о потоках как о процессах. (За исключением старых версий Linux) Процессы не разделяют память / объекты по умолчанию для начала, они работают полностью независимо (обычно это разные программы, возможно, написанные на разных языках). Они также запускаются по-разному с использованием разных API.

Существует мнение, что многопоточность - это сложная задача. На самом деле я бы сказал наоборот. Многопоточное программирование требует, чтобы ваш код был простым, понятным и понятным. Хотя это требует опыта, ваша цель - простота.

0
ответ дан 8 December 2019 в 04:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: