日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为什么同步的StringBuffer从来都不是一个好主意

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么同步的StringBuffer从来都不是一个好主意 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

介紹

StringBuffer是用于可變字符串的同步類。 使其同步的主要問題是

  • 它通常用作局部變量,因此使其同步只會使其變慢。
  • 以多線程方式使用它從來不是一個好主意。 這個問題是開發人員認為使用StringBuffer的方法在不使用時本身就是線程安全的。
  • StringBuffer的問題

    這是來自真實類的示例,該類用于許多交易系統的生產中。 它不是一種常用的方法,但是您可能會認為StringBuffer為您提供了線程安全,而實際上卻沒有。 public void addProperty(String name, String value) {if (value != null && value.length() > 0) {if (sb.length() > 0) {sb.append(',');}sb.append(name).append('=').append(value);}} 盡管單個調用是線程安全的,但多個調用卻不是。 要找到不涉及多個調用(包括toString)的StringBuffer的好用法,幾乎是不可能的

    一個難題

    想象一下三個線程的調用(不分先后) T1: addProperty("a", "b"); T2: addProperty("c", "d"); T3: sb.toString();

    編寫一個程序,該程序將生成T3的sb.toString()的所有可能輸出(我發現是89)。出于線程安全的考慮,您可以將其減少到4。

    注意

    如果使用StringBuilder,情況會更糟,但是至少您可能不會認為方法不是線程安全的。 例如SimpleDateFormat使用StringBuffer

    參考: 為什么我們的JCG合作伙伴 Peter Lawrey在Vanilla Java博客上從來沒有一個同步StringBuffer的好主意 。

    并發 2013-04-26

    彼得·勞瑞

    翻譯自: https://www.javacodegeeks.com/2013/04/why-a-synchronized-stringbuffer-was-never-a-good-idea.html

    總結

    以上是生活随笔為你收集整理的为什么同步的StringBuffer从来都不是一个好主意的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。