Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > java.util.concurrent.*


Автор: Java2 8.8.2006, 10:22
Народ, подскажи, пожалуйста, где взять хорошую доку по пакету  java.util.concurrent.*;  и желательно на русском. 

Автор: powerOn 8.8.2006, 10:29
На русском только если в книжке какой искать, а так можно http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html почитать.

Автор: Mayk 8.8.2006, 10:42
Можно получить  официальную доку самостоятельно. Распоковываем src.zip в папке с jdk и запускаем javadoc. Вуаля. Дока готова. 

Автор: Java2 8.8.2006, 10:47
Цитата(Mayk @  8.8.2006,  10:42 Найти цитируемый пост)
Можно получить  официальную доку самостоятельно. Распоковываем src.zip в папке с jdk и запускаем javadoc. Вуаля. Дока готова.  

Да такая дока у меня есть, только это не то. Нужно что-нибудь по подробней.

Автор: Maksym 8.8.2006, 10:59
Java2
Гм, куда уж подробнее чем javadoc и исходный код...

Автор: Java2 9.8.2006, 11:16
Цитата(Maksym @  8.8.2006,  10:59 Найти цитируемый пост)
Гм, куда уж подробнее чем javadoc и исходный код... 

Нет, это лишь базовые вещи. Нужно подробней, т.к. API всё целиком не описывает.

Автор: LSD 9.8.2006, 11:26
Цитата(Java2 @  9.8.2006,  12:16 Найти цитируемый пост)
Нет, это лишь базовые вещи. Нужно подробней, т.к. API всё целиком не описывает.

API - там как раз описан полностью. Что именно там не описано?

Автор: Java2 9.8.2006, 12:08
Хочется иметь какой-нибудь учебник о том, как этим пользоваться, т.к. в API всё коротко описано.

Автор: mulya 9.8.2006, 14:59
Вот здесь на русском, но без примеров, только описание и в каких ситуациях можно использовать:
http://www.ispras.ru/~RedVerst/RedVerst/Lectures%20and%20training%20courses/Software%20Development%20Technologies/Lecture05.doc

Автор: Java2 10.8.2006, 12:40
Цитата(mulya @  9.8.2006,  14:59 Найти цитируемый пост)
Вот здесь на русском, но без примеров, только описание и в каких ситуациях можно использовать:
.doc документ о java.util.concurent 

Загружается, но не открывается. Пишет ошибку. 

Может у кого-нибудь ещё есть подробная инфа по java.util.concurent.*, также интересуют ещё сокеты. 

Автор: Maksym 10.8.2006, 14:04
Java2
Я скачал, это обзорная лекция по Java-технологиям. Все что там есть по твоей теме:

•    java.util.concurent
Этот пакет и его подпакеты добавлены в JDK, начиная с версии 1.5. Он содержит набор классов, реализующих коллекции с различными эффективными моделями синхронизации обращений к ним из нескольких параллельных потоков (коллекции в java.util являются либо полностью синхронизированными, т.е. при работе одного потока с такой коллекцией все остальные стоят, либо не поддерживают корректной работы с несколькими потоками, например, в результате параллельного добавления в множество двух одинаковых элементов может быть создано исключение). Также в этот пакет и его подпакеты входят вспомогательные классы, реализующие различные модели синхронизации параллельных потоков.
o    ConcurrentHashMap, ConcurrentLinkedQueue — реализуют ассоциативный массив и очередь с эффективными моделями синхронизации
o    CopyOnWriteArrayList, CopyOnWriteArraySet — реализуют список и множество, копирующие внутренние данные при попытке их изменить. Итераторы таких коллекций перебирают только те элементы, которые присутствовали в коллекции при создании итератора.
o    CountDownLatch — реализует синхронизационную модель «щеколды» — создается щеколда (с натуральным числом в качестве параметра-счетчика), которая постепенно вынимается с выполнение каких-то операций (как только такая операция выпонена, вызывается метод void countDown(), уменьшающий счетчик). Потоки, которые должны подождать конца выполнения данной цепочки операций, вызывают метод await() и блокируются. Как только щеколда будет вынута (счетчик упадет до нуля), все ожидающие потоки разблокируются и продолжают выполнение.
o    CyclicBarrier — реализует синхронизационную модель «барьер» — каждый поток из некоторой группы доходит до барьера (созданного с числом потоков в группе в качестве параметра) и ждет, пока все они не дойдут до него (ожидание начинается при вызове await()). Как только число ожидающих потоков достигнет заданного, барьер убирается и все они могут продолжать выполнение. Кроме того, в качестве параметра конструктора можно задать некотоые действия (в виде объекта Runnable), которые будут выполняться после того, как все потоки достигнут барьера, но до их освобождения.
o    Semaphore — недвоичный семафор. Обеспечивает одновременную работу не более чем некоторого числа потоков. Такой объект создается с параметром-числом (доступных ресурсов), каждый поток, желающий захватить семафор, вызывает метод aquire(), каждый поток, желающий его освободить, вызывает метод release(). Если число захватов сравнилось с заданным при построении значением, каждый очередной захватывающий поток будут приостановлен, пока не семафор не будет освобожден одним из уже захвативших его потоков (после чего только один из ожидающих продолжит выполнение).
o    ThreadPoolExecutor — реализует пул потоков, предназначенных для обработки асинхронно поступающих заданий.
oo    void execute(Runnable) — передает пулу на выполнение некотрую задачу
oo    int getTaskCount() — возвращает примерное число задач, переданных на выполнение
oo    int getCompletedTaskCount() — возвращает примерное число выполненных задач
oo    boolean remove(Runnable) — удаляет задачу, если она еще не начала выполняться
oo    int getMaximumPoolSize() — возвращает макимально возможное число потоков в пуле
oo    int getPoolSize() — возвращает число потоков в пуле на данный момент
•    java.util.concurrent.locks
Содержит дополнительные реализации моделей синхронизации потоков.
o    ReenterantLock — двоичный семафор с возможностью многократного захвата одним потоком. 
oo    void lock() захватывает семафор для текущего потока
oo    void unlock() освобождает семафор, захваченный текущим потоком
oo    Condition newCondition() — возвращает объект-условие, связанный с данным семафором. Можно использовать это условие для блокировки потоков до его наступления. Поток блокируется вызовом await() у объекта-события и освобождается, когда у того же события будет вызван метод signal() (освобождает только один поток) или signalAll() (освобождает все блокированные потоки).
o    ReenterantReadWriteLock — реализует модель синхронизации «чтение-запись», позволяющую читать данные одновременно нескольким потокам, а изменять только одному.
oo    ReenterantReadWriteLock.ReadLock readLock() — возвращает объект для блокировки чтения
oo    ReenterantReadWriteLock.WriteLock writeLock() — возвращает объект для блокировки записи. Оба объекта реализуют общий интерфейс lock()-unlock() для установки или отключения соответствующих блокировок.

Автор: Sardar 10.8.2006, 14:59
Цитата(Maksym @  10.8.2006,  13:04 Найти цитируемый пост)
ReenterantLock — двоичный семафор с возможностью многократного захвата одним потоком. 

Обычный synchronized это обычный бинарный семафор, с возможностью рекурсивно захватить его одним и тем же потоком несколько раз (reentrant lock). Единственное что даёт класс это возможность увидеть всю очередь потоков + возможность поставить более либеральный режим, при котором тот кто ждал наиболее долго получит приоритет. В любом случае ИМХО обычный synchronized лучше, если не нужен экстрафункционал ReenterantLock.

ReenterantReadWriteLock - классная фича, которую всегда приходилось делать самому smile

Автор: Java2 10.8.2006, 18:31
все равно ничего не понятно из этого документа. 
Дело в том, что это всего мало, и даже API мало, чтобы понимать принципы, а не дергать только методы

Автор: batigoal 10.8.2006, 21:30
Цитата(Java2 @  10.8.2006,  19:31 Найти цитируемый пост)
Дело в том, что это всего мало, и даже API мало, чтобы понимать принципы, а не дергать только методы 

Так тебя интересует Java Concurrent, или общая теория синхронизации потоков?

Автор: LSD 10.8.2006, 21:50
Тогда я думаю тебе надо почитать литературу по многопоточному программированию, а уже потом доку по java.util.concurrent.

Автор: Sardar 10.8.2006, 23:53
Главное в мониторы врубиться, они наконец человеческие (хотя и не такие эффективные как должны быть) в классе ReentrantLock с его контекстами. Всё остальное на мониторах строиться очень просто.

Автор: Java2 11.8.2006, 13:48
Цитата(LSD @  10.8.2006,  21:50 Найти цитируемый пост)
Тогда я думаю тебе надо почитать литературу по многопоточному программированию, а уже потом доку по java.util.concurrent. 


А что за литература? Можно примеры книг?

Автор: Sardar 11.8.2006, 14:08
Я бы посоветовал эту книгу: http://www.williamspublishing.com/Books/5-8459-0388-2.html
Глянь в http://forum.vingrad.ru/books/Osnovy_mnogopotochnogo_parallelnogo_i_raspredelennogo_programmirovaniya/FMP03.doc, для интереса ещё в http://forum.vingrad.ru/books/Osnovy_mnogopotochnogo_parallelnogo_i_raspredelennogo_programmirovaniya/FMP11.DOC. Подробно, ясно и главное автор сам понимает о чём пишет (чего не скажешь о половине книг справочного характера), потому доступно smile
Книга в переводе свежая, в сети естественно не доступна.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)