ในเว็บแอปพลิเคชั่นการผลิตโปรแกรมเมอร์เพื่อนของฉันใช้ StringBuffer ทุกที่ ตอนนี้ฉันกำลังดูแลการพัฒนาแอพพลิเคชั่นและการแก้ไข หลังจากอ่านStringBuilderและStringBufferฉันได้ตัดสินใจเปลี่ยนรหัส StringBuffer ทั้งหมดด้วย StringBuilder เพราะเราไม่ต้องการความปลอดภัยของเธรดใน data beans ของเรา
ตัวอย่างเช่น: (ในแต่ละ data bean ฉันสามารถเห็นการใช้งานของ StringBuffer)
@Override
public String toString() {
StringBuffer sb = new StringBuffer();// replace it from StringBuilder
sb.append(" ABCD : ").append(abcd);
sb.append(", EFGH : ").append(efgh);
sb.append(", IJKL : ").append(ijkl);
}
เราสร้าง data beans แยกต่างหากสำหรับแต่ละเซสชั่น / คำขอ เซสชันถูกใช้โดยผู้ใช้คนเดียวซึ่งไม่มีผู้ใช้รายอื่นสามารถเข้าถึงได้
ฉันควรพิจารณาประเด็นอื่นก่อนย้ายหรือไม่
หากมีเธรดเดี่ยว (ไม่มีเธรดที่รออยู่ / ไม่มีเธรดใหม่ที่กำลังมองหาการล็อกวัตถุ) มันจะทำงานอย่างเท่าเทียมกันกับ StringBuffer หรือ StringBuilder ฉันรู้ในกรณีของ StringBuffer มันต้องใช้เวลาในการล็อควัตถุ แต่ฉันต้องการทราบว่ามีความแตกต่างด้านประสิทธิภาพระหว่างพวกเขาหรือไม่ยกเว้นการพัก / ปล่อยล็อควัตถุ
StringBuffer
เคยสงสัยที่ต้องการที่จะประสานสองหัวข้อพร้อมบางอย่างเช่นอินเตอร์เฟซของการเป็น ฉันไม่เคยเห็นรหัสเช่นนั้น แต่ฉันเกือบจะแน่ใจว่ามันเป็นการออกแบบที่ไม่ดีจากมุมมองแบบมัลติเธรด เพราะผมคิดว่าตรงกันด้ายพร้อมอินเตอร์เฟซที่เป็นความคิดที่ไม่ดีผมคิดว่าชั้นนี้ไม่ควรมีอยู่และควรใช้StringBuffer
StringBuilder
ตามที่คนอื่นพูดถึงแล้วStringBuffer
มีอยู่ด้วยเหตุผลทางประวัติศาสตร์
sb
เป็นตัวแปรเฉพาะที่ในตัวอย่างของคุณความปลอดภัยของเธรดไม่สำคัญเลย แม้ว่าหนึ่งพันเธรดจะป้อนวิธีการพร้อมกัน แต่แต่ละรายการจะมี call stack ของตนเองพร้อมกับตัวแปรโลคัล StringBuilders จะไม่รบกวนซึ่งกันและกัน