Re: How to use wait() and notifyAll() in simple container object
On Dec 17, 4:51 pm, "Bryan" <BTRichard...@gmail.com> wrote:
Ah yes... I did in fact misunderstand the purpose. Thanks for clearing
that up. I simply want to make sure that one thread doesn't try to
read at the same time another thread is writing. If so, I want the
read to come after the write. Otherwise, I'm not worried about data
loss.
Thanks!
Hmmm... the example at the website looks ok, but i wonder whether you
misunderstood its purpose, i.e. how the consumer-producer scenario works.
The idea is that you _cannot_ set ("produce") a new value _before_ the
old is consumed. That means to call set for a 2nd time and having an
effect, you need to call get() before, which consumes the value and lets
you set/produce another later.
The consumer-producer scenario is to avoid race conditions and to make
sure no information gets overwritten by accident (a value that is
replaced by another via a set() call before it was consumed by a get() call.
This is a typical scenario for a multithreaded buffer, where you want to
avoid that its content gets overwritten by incoming new data before it
was read, since that would mean data loss
If thats all you want to do,then you have a lot less choices...
1) Don't use objects whose values can be changed - use multiple
'immutable' objects. So the first thread uses the first object, then
the second thread one uses a different object based upon the value that
correct for it. (sounds compilcated and it is in some ways, but you
get great performance.
2) - The one which sounds like the best for your case. - Just
synchronize your methods like you have, without all of the extra
gubbings.
e.g.
public class Container {
private boolean value = false;
public Container(boolean value) {
this.value = value;
}
public synchronized boolean get() {
return value;
}
public synchronized void set(boolean value) {
this.value = value;
}
}