[concurrency-interest] Contract of java.io.OutputStream.write(byte b[])
Elias Ross
eross at m-Qube.com
Wed May 31 18:33:21 EDT 2006
I know this isn't really the forum for asking this, but I've spent a
number of hours looking into a definite yes or no...
I wanted to know if OutputStream.write(byte b[]) was considered atomic.
If two threads are writing to the same file, would the output from
OS.write(...) overlap with another OS.write(...)?
I eventually downloaded the Java source to answer this question. The
JavaDoc did not specify. As it turns out, the answer is "no" -- which
is something that you'd only be able to determine by looking at the C
source code for the native calls.
The JDK interpretation of write() is slightly different than the UNIX
one, which looks like this:
ssize_t write(int fd, const void *buf, size_t count);
so it makes sense that a Java write() call may have to do more than one
system write() call.
I wonder if there some better way that "concurrent" and "atomic" methods
can be documented in the JDK? It's also very helpful as a user to know
if I should be locking on the OutputStream itself or create my own
locks.
More information about the Concurrency-interest
mailing list