Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Обьект чтения-записи для двух потоков / 25 сообщений из 34, страница 1 из 2
18.03.2019, 02:38
    #39787496
Lemkoleg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
Добрый день. Подскажите, есть ли в java обьект (вроде ByteBuffer или ByteChannel), к которому возможно получить доступ одновременно двум потокам: одному для записи, другому для чтения. Без блокировки самого обьекта ( как минимум, на неиспользуемых в текущий момент байтах).
...
Рейтинг: 0 / 0
18.03.2019, 06:44
    #39787511
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
Lemkoleg,


Все что связано с атомик

https://docs.oracle.com/javase/tutorial/essential/concurrency/atomicvars.html


https://docs.oracle.com/javase/8/docs/api/index.html?java/util/concurrent/atomic/package-summary.html
Package java.util.concurrent.atomic

AtomicBoolean
A boolean value that may be updated atomically.
AtomicInteger
An int value that may be updated atomically.
AtomicIntegerArray
An int array in which elements may be updated atomically.
AtomicIntegerFieldUpdater<T>
A reflection-based utility that enables atomic updates to designated volatile int fields of designated classes.
AtomicLong
A long value that may be updated atomically.
AtomicLongArray
A long array in which elements may be updated atomically.
AtomicLongFieldUpdater<T>
A reflection-based utility that enables atomic updates to designated volatile long fields of designated classes.
AtomicMarkableReference<V>
An AtomicMarkableReference maintains an object reference along with a mark bit, that can be updated atomically.
AtomicReference<V>
An object reference that may be updated atomically.
AtomicReferenceArray<E>
An array of object references in which elements may be updated atomically.
AtomicReferenceFieldUpdater<T,V>
A reflection-based utility that enables atomic updates to designated volatile reference fields of designated classes.
AtomicStampedReference<V>
An AtomicStampedReference maintains an object reference along with an integer "stamp", that can be updated atomically.
DoubleAccumulator
One or more variables that together maintain a running double value updated using a supplied function.
DoubleAdder
One or more variables that together maintain an initially zero double sum.
LongAccumulator
One or more variables that together maintain a running long value updated using a supplied function.
LongAdder
One or more variables that together maintain an initially zero long sum.
...
Рейтинг: 0 / 0
18.03.2019, 06:48
    #39787512
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
Вообще чаще всего народ юзает хешмеп для этих целей
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html
...
Рейтинг: 0 / 0
18.03.2019, 07:13
    #39787518
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
Lemkoleg,
В java все объекты. От элементарного типа до космического корабля.
Стойкий к запросам большой объект получить труднее и он зовется thread safe.
Или вы о коллекции объектов?
Поэтому задачу нужно подробнее.
...
Рейтинг: 0 / 0
18.03.2019, 10:12
    #39787567
Lemkoleg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
Petro123,
Нужно байты, по мере их поступления в текущий поток, передать читающему потоку.
...
Рейтинг: 0 / 0
18.03.2019, 10:30
    #39787580
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
Почитай про Disruptor. Может подойдёт.
...
Рейтинг: 0 / 0
18.03.2019, 10:38
    #39787587
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
LemkolegPetro123,
Нужно байты, по мере их поступления в текущий поток, передать читающему потоку.а где тут запись и конфликт?
Ты бы не в двух словах описывал.
...
Рейтинг: 0 / 0
18.03.2019, 10:43
    #39787595
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
Lemkoleg,

Queue<byte[]>
...
Рейтинг: 0 / 0
18.03.2019, 13:46
    #39787757
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
LemkolegПодскажите, есть ли в java ...Вы бы хоть штатную документацию п(р)очитали предварительно ...
...
Рейтинг: 0 / 0
18.03.2019, 16:07
    #39787885
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
Андрей ПанфиловLemkoleg,

Queue<byte[]>

BlockingQueue<byte[]> ?
...
Рейтинг: 0 / 0
18.03.2019, 16:28
    #39787902
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
стандартно
ConcurrentLinkedQueue
обычно не очень удобно, т.к. Unbounded и нельзя понять сколько в данный момент там данных.

Single Consumer Single Producer Circle Ring Buffer
реализация от сторонних подельников. Вроде в Java обещали добавить. Как обстоят дела на данный момент - не знаю
Обычно это Bounded коллекция, что IMHO и хорошо.

Если я правильно догадался о задаче, которая стоит перед автором
...
Рейтинг: 0 / 0
18.03.2019, 16:46
    #39787922
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
LemkolegДобрый день. Подскажите, есть ли в java обьект (вроде ByteBuffer или ByteChannel), к которому возможно получить доступ одновременно двум потокам: одному для записи, другому для чтения. Без блокировки самого обьекта ( как минимум, на неиспользуемых в текущий момент байтах).

из готовых вам может подойти: AtomicIntegerArray
...
Рейтинг: 0 / 0
18.03.2019, 16:55
    #39787936
Lemkoleg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
Leonid Kudryavtsev,
Похоже что правильно. А можно по-подробней?
...
Рейтинг: 0 / 0
18.03.2019, 16:57
    #39787937
Lemkoleg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
А как на счет файла? Например RandomAccessFile? Если один поток откроет FileInputStream, а второй - FileOutputStream. Будут ли эти потоки работать одновременно, и будет ли у них (у каждого свой) счетчик текущей позиции?
...
Рейтинг: 0 / 0
18.03.2019, 16:57
    #39787938
Lemkoleg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
Озверин,
Спасибо, почитаю
...
Рейтинг: 0 / 0
18.03.2019, 16:58
    #39787939
Lemkoleg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
mayton,
Спасибо, гляну
...
Рейтинг: 0 / 0
18.03.2019, 17:04
    #39787945
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
LemkolegА как на счет файла? Например RandomAccessFile? Если один поток откроет FileInputStream, а второй - FileOutputStream. Будут ли эти потоки работать одновременно, и будет ли у них (у каждого свой) счетчик текущей позиции?если писать куда попало, даже со своим счетчиком, то будет белибеда в файле.
...
Рейтинг: 0 / 0
18.03.2019, 17:06
    #39787948
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
Походу вам потоки в задаче не нужны, т.к.вы не знаете что с ними делать.
Делайте в одном.
...
Рейтинг: 0 / 0
18.03.2019, 17:15
    #39787955
Lemkoleg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
Petro123,
Я б с удовольствием. Но, нужно в двух
...
Рейтинг: 0 / 0
18.03.2019, 17:16
    #39787958
Lemkoleg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
Petro123LemkolegА как на счет файла? Например RandomAccessFile? Если один поток откроет FileInputStream, а второй - FileOutputStream. Будут ли эти потоки работать одновременно, и будет ли у них (у каждого свой) счетчик текущей позиции?если писать куда попало, даже со своим счетчиком, то будет белибеда в файле.
Писать строго в порядке очереди. Читать - откуда попало, только в рамках уже записаного
...
Рейтинг: 0 / 0
18.03.2019, 17:17
    #39787959
Lemkoleg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
llemingАндрей ПанфиловLemkoleg,

Queue<byte[]>

BlockingQueue<byte[]> ?
Расматривается как вариант
...
Рейтинг: 0 / 0
18.03.2019, 17:29
    #39787965
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
LemkolegPetro123пропущено...
если писать куда попало, даже со своим счетчиком, то будет белибеда в файле.
Писать строго в порядке очереди. Читать - откуда попало, только в рамках уже записаногоочередь в двух независимых потоках как попало.
Поэтому чтобы прочесть то что записал потокБ надо внешнюю синхронизацию. Например, из основного потока дернуть чтение ПОСЛЕ записи.
И буфера выключить.
...
Рейтинг: 0 / 0
18.03.2019, 17:36
    #39787972
Lemkoleg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
Petro123Lemkolegпропущено...

Писать строго в порядке очереди. Читать - откуда попало, только в рамках уже записаногоочередь в двух независимых потоках как попало.
Поэтому чтобы прочесть то что записал потокБ надо внешнюю синхронизацию. Например, из основного потока дернуть чтение ПОСЛЕ записи.
И буфера выключить.
А что, если , читающий поток, читает все подряд. И, исключительно, если меняет порядок чтения, то сигнализирует пишущий поток, чтоб тот дал разрешение на чтение, т.к. только он знает, можно ли читать эти данные?
...
Рейтинг: 0 / 0
18.03.2019, 17:37
    #39787973
Lemkoleg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
И буфера выключить.
Можно по-подробней, что это значит и как это сделать?)))
...
Рейтинг: 0 / 0
18.03.2019, 17:41
    #39787979
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обьект чтения-записи для двух потоков
Lemkoleg,

Читающий может по таймеру постоянно перечитывать. Можно сигнализировать от пишущего.
Это уже БЛ.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Обьект чтения-записи для двух потоков / 25 сообщений из 34, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]