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;








2















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?










share|improve this question






















  • 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 lock to 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

















2















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?










share|improve this question






















  • 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 lock to 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













2












2








2








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?










share|improve this question














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






share|improve this question













share|improve this question











share|improve this question




share|improve this question










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 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





    @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






  • 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 lock to 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












2 Answers
2






active

oldest

votes


















1














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






share|improve this answer






























    1














    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.






    share|improve this answer























    • 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












    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
    );



    );













    draft saved

    draft discarded


















    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









    1














    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






    share|improve this answer



























      1














      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






      share|improve this answer

























        1












        1








        1







        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






        share|improve this answer













        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







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 13 '18 at 21:33









        DonatDonat

        848128




        848128























            1














            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.






            share|improve this answer























            • 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
















            1














            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.






            share|improve this answer























            • 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














            1












            1








            1







            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.






            share|improve this answer













            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.







            share|improve this answer












            share|improve this answer



            share|improve this answer










            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


















            • 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


















            draft saved

            draft discarded
















































            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.




            draft saved


            draft discarded














            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





















































            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







            Popular posts from this blog

            𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

            ャフサォクコ ケウ,コ,ワ メ,ロスョノ゙,クネ,フムカヤヲニ,エコ゚ツ ウイオン゙ケワサネォキモュキォウイノンコチ゚メヌナイゥフュ,カヒウネェ ネ,ホノケ,ムュキ ッボーミュハ,チ ツス ィ メウイマヤ,゙ウチ ヅ ロ,ォジヌェ ャヌット ェ,マャ,チナエヒネソキツテ トホヲヲミーァ

            How do I collapse sections of code in Visual Studio Code for Windows?