Java Multi Threading - примеры использования в реальном мире

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

Можете ли вы обратиться к некоторым сайтам для занятий.

Ответ 1

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

  • Обещающая проблема философа.
  • Проблема с читателем/писателем.
  • Проблема с потребителем/производителем.

Некоторые более конкретные:

  • Параллельный альфа-бета-поиск (это очень сложно).
  • Любой генетический алгоритм может быть реализован одновременно, и поскольку память/хранилище распределены между потоками, может быть довольно сложным, если сделать это правильно (попробуйте полупрозрачный многоугольник, рисующий проект изображения. Для этого вы можете искать в Google).
  • Совлокальный доступ к базе данных может быть довольно интересным. Нарисуйте сценарий для себя.
  • Посмотрите http://projecteuler.net/, который включает в себя множество интересных проблем. Многие из проблем могут быть реализованы с использованием потоков.

Enjoy.

Ответ 2

Я бы посмотрел библиотеку disruptor. Это вводит много передовых концепций многопоточности, и как только вы это поймете и сможете их использовать, вы узнаете больше, чем большинство из них по этому вопросу.

Ответ 3

Есть несколько проблем с Java, которые просто кричат ​​о многопоточном решении. В последнее время я недавно решил и решил:

  • File.list имеет ужасные проблемы, если в папке много тысяч файлов.
  • SAXParser.parse - это синтаксический анализатор push. Многие пользователи xml предпочли бы синтаксический анализатор, но скорее не добавили бы еще одну библиотеку.

Оба из них могут быть значительно облегчены с помощью простого двухпоточного решения.

В случае File.list запустите File.list в отдельном потоке со специальным FileFilter, который отправит все файлы, представленные ему, в BlockingQueue. Итератор на BlockingQueue может затем использоваться для доставки файлов вызывающему. Усовершенствование, чтобы перечислить каталог рекурсивно, является легким дополнением, если код написан правильно.

SAXParser.parse можно преобразовать наизнанку так же.

Я сделал это и совсем недавно, и нашел опыт очень полезным.

Ответ 4

Я бы порекомендовал вам создать следующую систему для начала темы:

  • Лифт (3 в строке), учитывающий следующие параметры:

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

    Потребление времени.

  • Система чтения и записи файлов, где несколько пользователей могут:

    Edit/Write/Search/Delete a file

Ответ 5

Многопоточность, имитируемая потоками пользовательского уровня. Эти потоки реализованы на уровне приложений, а не на уровне ядра операционной системы.

Эти потоки также называются зелеными нитями, потому что они свежие (совершенно новые) и молодые (не зрелые или зрелые).

Примеры использования в реальном мире

  • В Компьютерные игры, такие объекты, как автомобили, мотоциклы и т.д. Это просто потоки.
  • Асинхронная связь может позволить приложению выполнять дополнительные задачи, а не ждать завершения задач.
  • Приложения, у которых есть ряд задач, которые могут выполняться в любом порядке, часто могут быть полезны при распределенной асинхронной связи.

Ответ 6

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

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

  • Если некоторые задачи могут выполняться независимо друг от друга в зависимости от других задач (просто установите новый Thread или отправьте Runnable/Callable задачи на ExecutorService/ThreadPoolExecutor)
  • Если вам нужно дождаться завершения нескольких параллельных задач, чтобы перейти к следующей задаче (invokeAll())

    например. Задача 1 запускает три независимых задания Задача 2, Задача 3 и Задача 4, но Задача 5 должна начинаться после завершения Задачи 2, Задачи 3 и Задачи 4.

 Task 1              
----->               
         Task 2
         ----->
         Task 3
         ----->
         Task 4
         ----->
                  Task 5
-------------------------->
  1. Система способна использовать несколько ядер процессора
  2. Если у вас есть примеры использования Задачи Fork-Join (используйте: ForkJoinPool)
  3. Если вы хотите показать ход выполнения длинной задачи вычисления (индикатор выполнения может быть показан в одном потоке, а долгая задача вычисления может быть выполнена другим потоком)

Похожие сообщения:

Как правильно использовать Java Executor?

Использовать службу invokeAll или submit - java Executor

Java-приложение Fork/Join vs ExecutorService - когда использовать, который?

дождитесь, пока все потоки закончат работу в java