Dalam aplikasi web produksi, sesama programmer saya menggunakan StringBuffer di mana-mana. Sekarang saya menangani pengembangan aplikasi dan koreksi. Setelah membaca StringBuilder dan StringBuffer, saya telah memutuskan untuk mengganti semua kode StringBuffer dengan StringBuilder karena kita tidak memerlukan keamanan thread pada data bean kita.
Sebagai contoh: (Di setiap data kacang saya bisa melihat penggunaan 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);
}
Kami membuat data terpisah untuk setiap sesi / permintaan. Sesi digunakan oleh satu pengguna yang tidak dapat diakses oleh pengguna lain.
Haruskah saya mempertimbangkan poin lain sebelum bermigrasi?
Jika ada utas tunggal (tidak ada utas tunggu / tidak ada utas baru akan mencari kunci objek), itu berfungsi sama dengan baik StringBuffer atau StringBuilder. Saya tahu dalam kasus StringBuffer, dibutuhkan waktu untuk mengambil kunci objek tapi saya ingin tahu apakah ada perbedaan kinerja di antara mereka kecuali menahan / melepaskan kunci objek.
StringBuffer
. Saya belum pernah melihat kode seperti itu tapi saya hampir yakin itu desain yang buruk dari perspektif multithreading. Karena saya pikir menyinkronkan utas di sepanjang StringBuffer
antarmuka adalah ide yang buruk saya pikir kelas ini seharusnya tidak ada dan harus selalu digunakan StringBuilder
. Seperti yang telah disebutkan orang lain, StringBuffer
ada karena alasan historis.
sb
sebagai variabel lokal seperti pada contoh Anda, maka keamanan utas sama sekali tidak masalah. Bahkan jika seribu utas secara bersamaan memasuki metode, masing-masing akan memiliki tumpukan panggilan sendiri dengan variabel lokalnya sendiri. The StringBuilders tidak akan pernah saling mengganggu.