Is BufferedWriter.append in Java thread safe?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
So I have a file that multiple threads try to write to simultaneously.
I used Buffered Writer to write to the file. Now, my question is if use append to append thread's content to the file, will it be thread safe?
java processbuilder
|
show 4 more comments
So I have a file that multiple threads try to write to simultaneously.
I used Buffered Writer to write to the file. Now, my question is if use append to append thread's content to the file, will it be thread safe?
java processbuilder
Are they all using the same writer?
– shmosel
Nov 13 '18 at 21:19
1
@MadProgrammer but that isn't a documented property, so it would be inadvisable to rely on it.
– Andy Turner
Nov 13 '18 at 21:29
1
@AndyTurner the superclass Writer's javadoc language indicates the subclasses need to synchronize on the objectlockto protect their critical sessions. Could have been more explicit, but it's there
– Erwin Bolwidt
Nov 13 '18 at 21:33
1
@ErwinBolwidt true, but it doesn't define what the critical sections are.
– Andy Turner
Nov 13 '18 at 21:34
1
@AndyTurner I guess it comes down to the definition of "critical sections". Perhaps raise a change request to have the documentation more clearly defined :/
– MadProgrammer
Nov 13 '18 at 21:38
|
show 4 more comments
So I have a file that multiple threads try to write to simultaneously.
I used Buffered Writer to write to the file. Now, my question is if use append to append thread's content to the file, will it be thread safe?
java processbuilder
So I have a file that multiple threads try to write to simultaneously.
I used Buffered Writer to write to the file. Now, my question is if use append to append thread's content to the file, will it be thread safe?
java processbuilder
java processbuilder
asked Nov 13 '18 at 21:18
AdityaAditya
5321622
5321622
Are they all using the same writer?
– shmosel
Nov 13 '18 at 21:19
1
@MadProgrammer but that isn't a documented property, so it would be inadvisable to rely on it.
– Andy Turner
Nov 13 '18 at 21:29
1
@AndyTurner the superclass Writer's javadoc language indicates the subclasses need to synchronize on the objectlockto protect their critical sessions. Could have been more explicit, but it's there
– Erwin Bolwidt
Nov 13 '18 at 21:33
1
@ErwinBolwidt true, but it doesn't define what the critical sections are.
– Andy Turner
Nov 13 '18 at 21:34
1
@AndyTurner I guess it comes down to the definition of "critical sections". Perhaps raise a change request to have the documentation more clearly defined :/
– MadProgrammer
Nov 13 '18 at 21:38
|
show 4 more comments
Are they all using the same writer?
– shmosel
Nov 13 '18 at 21:19
1
@MadProgrammer but that isn't a documented property, so it would be inadvisable to rely on it.
– Andy Turner
Nov 13 '18 at 21:29
1
@AndyTurner the superclass Writer's javadoc language indicates the subclasses need to synchronize on the objectlockto protect their critical sessions. Could have been more explicit, but it's there
– Erwin Bolwidt
Nov 13 '18 at 21:33
1
@ErwinBolwidt true, but it doesn't define what the critical sections are.
– Andy Turner
Nov 13 '18 at 21:34
1
@AndyTurner I guess it comes down to the definition of "critical sections". Perhaps raise a change request to have the documentation more clearly defined :/
– MadProgrammer
Nov 13 '18 at 21:38
Are they all using the same writer?
– shmosel
Nov 13 '18 at 21:19
Are they all using the same writer?
– shmosel
Nov 13 '18 at 21:19
1
1
@MadProgrammer but that isn't a documented property, so it would be inadvisable to rely on it.
– Andy Turner
Nov 13 '18 at 21:29
@MadProgrammer but that isn't a documented property, so it would be inadvisable to rely on it.
– Andy Turner
Nov 13 '18 at 21:29
1
1
@AndyTurner the superclass Writer's javadoc language indicates the subclasses need to synchronize on the object
lock to protect their critical sessions. Could have been more explicit, but it's there– Erwin Bolwidt
Nov 13 '18 at 21:33
@AndyTurner the superclass Writer's javadoc language indicates the subclasses need to synchronize on the object
lock to protect their critical sessions. Could have been more explicit, but it's there– Erwin Bolwidt
Nov 13 '18 at 21:33
1
1
@ErwinBolwidt true, but it doesn't define what the critical sections are.
– Andy Turner
Nov 13 '18 at 21:34
@ErwinBolwidt true, but it doesn't define what the critical sections are.
– Andy Turner
Nov 13 '18 at 21:34
1
1
@AndyTurner I guess it comes down to the definition of "critical sections". Perhaps raise a change request to have the documentation more clearly defined :/
– MadProgrammer
Nov 13 '18 at 21:38
@AndyTurner I guess it comes down to the definition of "critical sections". Perhaps raise a change request to have the documentation more clearly defined :/
– MadProgrammer
Nov 13 '18 at 21:38
|
show 4 more comments
2 Answers
2
active
oldest
votes
When you inspect the implementation, you can see that there is a lock object and the methods such as write or flush are synchronizing with a common object lock.
synchronized (lock)
... here is the body of the method, enclosed in the sync block
add a comment |
One of the problems with the question "is it thread safe" is that the answer depends upon what you mean by thread safety.
A class can be thread safe, in the sense that its own invariants cannot be broken by its use by multiple threads simultaneously; but you can still use that class in a non-threadsafe way.
For example:
void write(int a, String blah)
writer.write(a);
writer.write(blah);
These two writes are not performed atomically, so there is a possibility that the writes from two threads interleave.
If you are in any doubt about thread safety, manage it yourself.
I think it's fairly obvious from my question, that I am not asking about chaining together multiple appends or asking about a situation where I deliberately try to break the thread safety of the append method(if it was thread safe). I have described my use case in the question.
– Aditya
Nov 15 '18 at 15:55
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53289631%2fis-bufferedwriter-append-in-java-thread-safe%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
When you inspect the implementation, you can see that there is a lock object and the methods such as write or flush are synchronizing with a common object lock.
synchronized (lock)
... here is the body of the method, enclosed in the sync block
add a comment |
When you inspect the implementation, you can see that there is a lock object and the methods such as write or flush are synchronizing with a common object lock.
synchronized (lock)
... here is the body of the method, enclosed in the sync block
add a comment |
When you inspect the implementation, you can see that there is a lock object and the methods such as write or flush are synchronizing with a common object lock.
synchronized (lock)
... here is the body of the method, enclosed in the sync block
When you inspect the implementation, you can see that there is a lock object and the methods such as write or flush are synchronizing with a common object lock.
synchronized (lock)
... here is the body of the method, enclosed in the sync block
answered Nov 13 '18 at 21:33
DonatDonat
848128
848128
add a comment |
add a comment |
One of the problems with the question "is it thread safe" is that the answer depends upon what you mean by thread safety.
A class can be thread safe, in the sense that its own invariants cannot be broken by its use by multiple threads simultaneously; but you can still use that class in a non-threadsafe way.
For example:
void write(int a, String blah)
writer.write(a);
writer.write(blah);
These two writes are not performed atomically, so there is a possibility that the writes from two threads interleave.
If you are in any doubt about thread safety, manage it yourself.
I think it's fairly obvious from my question, that I am not asking about chaining together multiple appends or asking about a situation where I deliberately try to break the thread safety of the append method(if it was thread safe). I have described my use case in the question.
– Aditya
Nov 15 '18 at 15:55
add a comment |
One of the problems with the question "is it thread safe" is that the answer depends upon what you mean by thread safety.
A class can be thread safe, in the sense that its own invariants cannot be broken by its use by multiple threads simultaneously; but you can still use that class in a non-threadsafe way.
For example:
void write(int a, String blah)
writer.write(a);
writer.write(blah);
These two writes are not performed atomically, so there is a possibility that the writes from two threads interleave.
If you are in any doubt about thread safety, manage it yourself.
I think it's fairly obvious from my question, that I am not asking about chaining together multiple appends or asking about a situation where I deliberately try to break the thread safety of the append method(if it was thread safe). I have described my use case in the question.
– Aditya
Nov 15 '18 at 15:55
add a comment |
One of the problems with the question "is it thread safe" is that the answer depends upon what you mean by thread safety.
A class can be thread safe, in the sense that its own invariants cannot be broken by its use by multiple threads simultaneously; but you can still use that class in a non-threadsafe way.
For example:
void write(int a, String blah)
writer.write(a);
writer.write(blah);
These two writes are not performed atomically, so there is a possibility that the writes from two threads interleave.
If you are in any doubt about thread safety, manage it yourself.
One of the problems with the question "is it thread safe" is that the answer depends upon what you mean by thread safety.
A class can be thread safe, in the sense that its own invariants cannot be broken by its use by multiple threads simultaneously; but you can still use that class in a non-threadsafe way.
For example:
void write(int a, String blah)
writer.write(a);
writer.write(blah);
These two writes are not performed atomically, so there is a possibility that the writes from two threads interleave.
If you are in any doubt about thread safety, manage it yourself.
answered Nov 13 '18 at 21:40
Andy TurnerAndy Turner
84.4k983144
84.4k983144
I think it's fairly obvious from my question, that I am not asking about chaining together multiple appends or asking about a situation where I deliberately try to break the thread safety of the append method(if it was thread safe). I have described my use case in the question.
– Aditya
Nov 15 '18 at 15:55
add a comment |
I think it's fairly obvious from my question, that I am not asking about chaining together multiple appends or asking about a situation where I deliberately try to break the thread safety of the append method(if it was thread safe). I have described my use case in the question.
– Aditya
Nov 15 '18 at 15:55
I think it's fairly obvious from my question, that I am not asking about chaining together multiple appends or asking about a situation where I deliberately try to break the thread safety of the append method(if it was thread safe). I have described my use case in the question.
– Aditya
Nov 15 '18 at 15:55
I think it's fairly obvious from my question, that I am not asking about chaining together multiple appends or asking about a situation where I deliberately try to break the thread safety of the append method(if it was thread safe). I have described my use case in the question.
– Aditya
Nov 15 '18 at 15:55
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53289631%2fis-bufferedwriter-append-in-java-thread-safe%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Are they all using the same writer?
– shmosel
Nov 13 '18 at 21:19
1
@MadProgrammer but that isn't a documented property, so it would be inadvisable to rely on it.
– Andy Turner
Nov 13 '18 at 21:29
1
@AndyTurner the superclass Writer's javadoc language indicates the subclasses need to synchronize on the object
lockto protect their critical sessions. Could have been more explicit, but it's there– Erwin Bolwidt
Nov 13 '18 at 21:33
1
@ErwinBolwidt true, but it doesn't define what the critical sections are.
– Andy Turner
Nov 13 '18 at 21:34
1
@AndyTurner I guess it comes down to the definition of "critical sections". Perhaps raise a change request to have the documentation more clearly defined :/
– MadProgrammer
Nov 13 '18 at 21:38