В этой статье в основном рассматривается использование Java -одновременного программирования Callable и Future, и общие примеры кодов, а подробности следующие.
Мы все знаем, что есть два способа реализации многопоточного. Одним из них является унаследование потока, а другой - реализовать. Однако оба этих двух способа имеют дефект, и результат возврата не может быть получен после выполнения задачи. Чтобы получить результат возврата, вы должны использовать Callable. Задача CALLABLE может иметь возвращаемое значение, но она не может напрямую получить возвращаемое значение из вызывного задания; Если вы хотите получить возвращаемое значение задачи, которая нужно использовать в будущем. Таким образом, вызов и будущий режим обычно используются в комбинации.
Представьте себе сценарий: вам нужен интерфейс пост -список. В дополнение к возврату списка сообщений, вам также необходимо вернуть список аналогичных и комментариев каждого поста. Для расчетов 10 сообщений на странице этот интерфейс требует доступа к базе данных 21 раза. После доступа к базе данных рассчитывается на основе 100 мс, 21 раза, а совокупное время составляет 2,1 с. Это время ответа, вероятно, неудовлетворительное. Что делать? Асинхронное преобразование интерфейсов.
После обнаружения списка сообщений, итерации по списку POST, запустите 10 потоков в цикле и одновременно получите подобный список каждого поста, и в то же время настраиваются 10 потоков для получения списка комментариев каждого поста. После этого преобразования время отклика интерфейса значительно сокращено до 200 мс. В настоящее время нам нужно использовать Callabel в сочетании с будущим для его достижения.
Приватный список <pstresponse> createPoStressEslist (page <ptresponse> page, final String userId) {if (page.getCount () == 0 || page == null || page.getList () == null) {return null; } // Получить список постов список <ptresponse> circleresponselist = page.getlist (); int size = circleresponselist.size (); Executorservice commentpool = executors.newfixedthreadpool (size); Executorservice supportpool = executors.newfixedthreadpool (размер); try {list <Future> CommentFutureList = new ArrayList <Future> (size); if (circleresponselist! = null && circleresponselist.size ()> 0) {for (postresponse postresponse: circleresponselist) {final String circleid = postresponse.getId (); final String postUserid = postresponse.getUserid (); // Проверьте список комментариев Callable <List <CircLeReviews >> callableComment = new Callable <List <cirlereviews >> () {@override public list <cirlereviews> call () throws exception {return circleReviewsbiz.getPostComments (circleID); }}; Будущее f = commentpool.submit (callablecomment); CommentFutureList.Add (f); // Проверьте список Like Callable <List <Circlezan >> Callablesupport = new Callable <List <Circlezan >> () {@Override public list <cliplzan> call () Throws exection {return restrazanbiz.findlist (circleid); }}; Future SupportFuture = SupportPool.submit (CallablesUpport); CommentFutureList.Add (SupportFuture); }} // Получить результаты выполнения всех параллельных задач int i = 0; Postresponse temp = null; для (будущее F: CommentFuturelist) {temp = circleresponselist.get (i); temp.setCommentList ((list <circleReviews>) f.get (); temp.setSupportList ((list <circlezan>) f.get (); circleresponselist.set (i, temp); i ++;}} catch (Exception e) {e.printStacktrace ();}, наконец, { / / Close Thread Poolpool } вернуть Circleresponselist;Суммировать
Выше приведено все содержание этой статьи о примере приложения примера кода java -одновременного программирования Callable и Future. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!