JAVAPRO_IR Telegram 4558
📘 موضوع : 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
👍6



tgoop.com/javapro_ir/4558
Create:
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

View MORE
Open in Telegram


Telegram News

Date: |

With the sharp downturn in the crypto market, yelling has become a coping mechanism for many crypto traders. This screaming therapy became popular after the surge of Goblintown Ethereum NFTs at the end of May or early June. Here, holders made incoherent groaning sounds in late-night Twitter spaces. They also role-played as urine-loving Goblin creatures. How to build a private or public channel on Telegram? Unlimited number of subscribers per channel Telegram iOS app: In the “Chats” tab, click the new message icon in the right upper corner. Select “New Channel.”
from us


Telegram برنامه نویسی جاوا | Java
FROM American