Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Обьект чтения-записи для двух потоков  [new]
Lemkoleg
Member

Откуда:
Сообщений: 227
Добрый день. Подскажите, есть ли в java обьект (вроде ByteBuffer или ByteChannel), к которому возможно получить доступ одновременно двум потокам: одному для записи, другому для чтения. Без блокировки самого обьекта ( как минимум, на неиспользуемых в текущий момент байтах).
18 мар 19, 02:38    [21835501]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Sergunka
Member

Откуда: Bay Area, CA
Сообщений: 1999
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.
18 мар 19, 06:44    [21835548]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Sergunka
Member

Откуда: Bay Area, CA
Сообщений: 1999
Вообще чаще всего народ юзает хешмеп для этих целей
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html
18 мар 19, 06:48    [21835549]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Lemkoleg,
В java все объекты. От элементарного типа до космического корабля.
Стойкий к запросам большой объект получить труднее и он зовется thread safe.
Или вы о коллекции объектов?
Поэтому задачу нужно подробнее.
18 мар 19, 07:13    [21835556]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Lemkoleg
Member

Откуда:
Сообщений: 227
Petro123,
Нужно байты, по мере их поступления в текущий поток, передать читающему потоку.
18 мар 19, 10:12    [21835630]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
mayton
Member

Откуда: loopback
Сообщений: 42845
Почитай про Disruptor. Может подойдёт.
18 мар 19, 10:30    [21835646]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Lemkoleg
Petro123,
Нужно байты, по мере их поступления в текущий поток, передать читающему потоку.
а где тут запись и конфликт?
Ты бы не в двух словах описывал.
18 мар 19, 10:38    [21835653]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3342
Lemkoleg,

Queue<byte[]>
18 мар 19, 10:43    [21835662]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9468
Lemkoleg
Подскажите, есть ли в java ...
Вы бы хоть штатную документацию п(р)очитали предварительно ...
18 мар 19, 13:46    [21835922]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
lleming
Member

Откуда:
Сообщений: 1653
Андрей Панфилов
Lemkoleg,

Queue<byte[]>


BlockingQueue<byte[]> ?
18 мар 19, 16:07    [21836171]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7989
стандартно
ConcurrentLinkedQueue
обычно не очень удобно, т.к. Unbounded и нельзя понять сколько в данный момент там данных.

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

Если я правильно догадался о задаче, которая стоит перед автором
18 мар 19, 16:28    [21836203]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
Lemkoleg
Добрый день. Подскажите, есть ли в java обьект (вроде ByteBuffer или ByteChannel), к которому возможно получить доступ одновременно двум потокам: одному для записи, другому для чтения. Без блокировки самого обьекта ( как минимум, на неиспользуемых в текущий момент байтах).


из готовых вам может подойти: AtomicIntegerArray
18 мар 19, 16:46    [21836236]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Lemkoleg
Member

Откуда:
Сообщений: 227
Leonid Kudryavtsev,
Похоже что правильно. А можно по-подробней?
18 мар 19, 16:55    [21836259]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Lemkoleg
Member

Откуда:
Сообщений: 227
А как на счет файла? Например RandomAccessFile? Если один поток откроет FileInputStream, а второй - FileOutputStream. Будут ли эти потоки работать одновременно, и будет ли у них (у каждого свой) счетчик текущей позиции?
18 мар 19, 16:57    [21836262]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Lemkoleg
Member

Откуда:
Сообщений: 227
Озверин,
Спасибо, почитаю
18 мар 19, 16:57    [21836263]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Lemkoleg
Member

Откуда:
Сообщений: 227
mayton,
Спасибо, гляну
18 мар 19, 16:58    [21836264]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Lemkoleg
А как на счет файла? Например RandomAccessFile? Если один поток откроет FileInputStream, а второй - FileOutputStream. Будут ли эти потоки работать одновременно, и будет ли у них (у каждого свой) счетчик текущей позиции?
если писать куда попало, даже со своим счетчиком, то будет белибеда в файле.
18 мар 19, 17:04    [21836275]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Походу вам потоки в задаче не нужны, т.к.вы не знаете что с ними делать.
Делайте в одном.
18 мар 19, 17:06    [21836281]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Lemkoleg
Member

Откуда:
Сообщений: 227
Petro123,
Я б с удовольствием. Но, нужно в двух
18 мар 19, 17:15    [21836293]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Lemkoleg
Member

Откуда:
Сообщений: 227
Petro123
Lemkoleg
А как на счет файла? Например RandomAccessFile? Если один поток откроет FileInputStream, а второй - FileOutputStream. Будут ли эти потоки работать одновременно, и будет ли у них (у каждого свой) счетчик текущей позиции?
если писать куда попало, даже со своим счетчиком, то будет белибеда в файле.

Писать строго в порядке очереди. Читать - откуда попало, только в рамках уже записаного
18 мар 19, 17:16    [21836296]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Lemkoleg
Member

Откуда:
Сообщений: 227
lleming
Андрей Панфилов
Lemkoleg,

Queue<byte[]>


BlockingQueue<byte[]> ?

Расматривается как вариант
18 мар 19, 17:17    [21836298]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Lemkoleg
Petro123
пропущено...
если писать куда попало, даже со своим счетчиком, то будет белибеда в файле.

Писать строго в порядке очереди. Читать - откуда попало, только в рамках уже записаного
очередь в двух независимых потоках как попало.
Поэтому чтобы прочесть то что записал потокБ надо внешнюю синхронизацию. Например, из основного потока дернуть чтение ПОСЛЕ записи.
И буфера выключить.
18 мар 19, 17:29    [21836310]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Lemkoleg
Member

Откуда:
Сообщений: 227
Petro123
Lemkoleg
пропущено...

Писать строго в порядке очереди. Читать - откуда попало, только в рамках уже записаного
очередь в двух независимых потоках как попало.
Поэтому чтобы прочесть то что записал потокБ надо внешнюю синхронизацию. Например, из основного потока дернуть чтение ПОСЛЕ записи.
И буфера выключить.

А что, если , читающий поток, читает все подряд. И, исключительно, если меняет порядок чтения, то сигнализирует пишущий поток, чтоб тот дал разрешение на чтение, т.к. только он знает, можно ли читать эти данные?
18 мар 19, 17:36    [21836321]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Lemkoleg
Member

Откуда:
Сообщений: 227
И буфера выключить.

Можно по-подробней, что это значит и как это сделать?)))
18 мар 19, 17:37    [21836322]     Ответить | Цитировать Сообщить модератору
 Re: Обьект чтения-записи для двух потоков  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Lemkoleg,

Читающий может по таймеру постоянно перечитывать. Можно сигнализировать от пишущего.
Это уже БЛ.
18 мар 19, 17:41    [21836329]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Java Ответить