Re: Two more multithreading questions
On Jan 30, 9:44 am, Knute Johnson <nos...@rabbitbrush.frazmtn.com>
wrote:
Patricia Shanahan wrote:
Knute Johnson wrote:
I've got two specific scenarios I want to ask about:
1) I have a class with an instance variable that is a reference to a
JDialog. In one thread I create new instances of JDialog and make
them visible. They might get closed in this thread as well. In
another thread I close the JDialog using the class instance variable.
To ensure that my dialog closing thread always has a reference to the
current dialog I created the instance variable with volatile. Is this
adequate to guarantee that my closing thread always has a reference to
the latest dialog?
I believe most javax.swing component access is supposed to be done in
the event handling thread anyway. Swing was not designed to be
multithread-safe.
Sorry, bad example. Say it is an Integer that is being created in one
thread and in the other you are using the intValue() method.
Thanks,
--
Knute Johnson
email s/nospam/knute/
Integer is a bad example too, since it is immutable, which means onces
its created, its value doesn't change.
A good example might be a File object.
Thread W can alter the file object, and Thread R can query it.
The safest way to insure that your Thread R only sees what its
supposed to is to wrap bother the object modifying and object querying
code in synchronize blocks that sync on the same object O. That
object O can be ANY object.
public class ThreadSafeFileAccessor {
private final Object sync = new Object();
private File file = new File();
public void modifyFile() {
synchronize(sync) {
// do modification of file
}
}
public String queryFile() {
synchronize(sync) {
return file.toString();
}
}
}
Also be aware that Java 1.5 includes a new locking mechanism and other
concurrency utilities which gives you more fine grained control over
thread synchronization.
<http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-
summary.html>
Good luck :-)