Я пытаюсь создать систему, в которой один поток A добавляет элементы в буфер, затем другой поток B отвечает за чтение элементов в том порядке, в котором они были введены, а затем за выполнение некоторых потенциально длительных операций с ними.
Мое лучшее предположение:
Class B extends Thread {
Buffer fifo = BufferUtils.synchronizedBuffer(new BoundedFifoBuffer());
add(Object o) { // Thread A calls me, and doesn't deal well with delays :)
fifo.add(o); // will the sync below prevent this from happening?
// or can .add be independent of the sync ?
}
run() {
synchronized (fifo) { // why am i sync'd here? I am the only thread accessing...
while ( item in buffer ) { // also how do i check this, and block otherwise?
process(fifo.remove());
}
}
|
}
Как видите, я даже не совсем уверен, нужна ли синхронизация. Проблема безопасности потока, которая у меня есть, не имеет ничего общего с доступом get (), так как к нему будет иметь доступ только один поток, но что важно most , так это то, что поток A вызывает метод .add () без параллелизма Доступ к Exception во время обработки потоком содержимого буфера.
Может, я обдумываю это? Безопасно ли быть с? Ваша оценка этой проблемы очень ценится.
С уважением,
Jay