tgoop.com/javapro_ir/4558
Create:
Last Update:
Last Update:
📘 موضوع : StringBuilder vs StringBuffer — تفاوت در عملکرد و Thread-Safety
در جاوا، وقتی بخواهیم رشتهها را به صورت قابلتغییر (Mutable) مدیریت کنیم، به جای استفاده از String از StringBuilder یا StringBuffer استفاده میکنیم.
اما تفاوت اصلی این دو در نخ ایمنی (Thread Safety) و کارایی (Performance) است.
🔹 ۱. StringBuffer — ایمن در برابر چند نخ (Thread-Safe):
کلاس StringBuffer از نسخههای اولیهی جاوا وجود دارد و همهی متدهای آن synchronized هستند.
یعنی فقط یک Thread در هر لحظه میتواند به آن دسترسی داشته باشد.
✅ مناسب برای برنامههایی که چند Thread همزمان روی یک رشته کار میکنند.
❌ ولی کندتر از StringBuilder است، چون همواره باید قفل (lock) برقرار شود.
📘 مثال:
public class BufferExample {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("Hello");
sb.append(" Java");
sb.append(" World!");
System.out.println(sb); // Hello Java World!
}
}
در محیطهای چندنخی (multi-threaded)، این روش امن است چون StringBuffer از قفل استفاده میکند تا داده خراب نشود.
🔹 ۲. StringBuilder — سریعتر اما غیرایمن (Not Thread-Safe):
کلاس StringBuilder در جاوا 5 معرفی شد تا جایگزینی سریعتر برای StringBuffer باشد.
متدهای آن synchronized نیستند، پس در محیط تکنخی (Single Thread) عملکرد بهتری دارد.
✅ بسیار سریعتر از StringBuffer است.
❌ در محیط چندنخی نباید همزمان از چند Thread به آن دسترسی داشت.
📘 مثال:
public class BuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
sb.append(" Java");
sb.append(" World!");
System.out.println(sb); // Hello Java World!
}
}
در برنامههای ساده یا الگوریتمهایی مثل ساخت رشته در حلقهها (`for`)، همیشه StringBuilder انتخاب بهتری است.
🔹 ۳. تفاوت در سرعت:
در محیط تکنخی، StringBuilder معمولاً ۳۰ تا ۴۰ درصد سریعتر از StringBuffer است، چون از هیچ قفلی استفاده نمیکند.
📘 مثال مقایسه عملکرد:
public class PerformanceTest {
public static void main(String[] args) {
long start1 = System.nanoTime();
StringBuilder sb = new StringBuilder();
for(int i = 0; i < 100000; i++) sb.append("A");
System.out.println("StringBuilder: " + (System.nanoTime() - start1));
long start2 = System.nanoTime();
StringBuffer sbf = new StringBuffer();
for(int i = 0; i < 100000; i++) sbf.append("A");
System.out.println("StringBuffer: " + (System.nanoTime() - start2));
}
}
در بیشتر موارد، StringBuilder سریعتر اجرا میشود.
✅ جمعبندی نهایی:
* اگر برنامهی شما تکنخی (Single-threaded) است ➤ از StringBuilder استفاده کن.
* اگر برنامهی شما چندنخی (Multi-threaded) است ➤ از StringBuffer استفاده کن.
* هر دو Mutable هستند و برای کارهای زیاد با رشتهها مناسبتر از String هستند.
🔥 نکته مهم:
در واقع String در جاوا Immutable است، اما StringBuilder و StringBuffer Mutable هستند؛ بنابراین استفادهی درست از آنها در جاهایی که رشتهها زیاد تغییر میکنند باعث افزایش چشمگیر کارایی برنامه میشود.
#کاربرـپیشرفته
🆔 @javapro_ir
🆔 @group_javapro
BY برنامه نویسی جاوا | Java
Share with your friend now:
tgoop.com/javapro_ir/4558