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: |

It’s yet another bloodbath on Satoshi Street. As of press time, Bitcoin (BTC) and the broader cryptocurrency market have corrected another 10 percent amid a massive sell-off. Ethereum (EHT) is down a staggering 15 percent moving close to $1,000, down more than 42 percent on the weekly chart. To upload a logo, click the Menu icon and select “Manage Channel.” In a new window, hit the Camera icon. More>> Ng Man-ho, a 27-year-old computer technician, was convicted last month of seven counts of incitement charges after he made use of the 100,000-member Chinese-language channel that he runs and manages to post "seditious messages," which had been shut down since August 2020. 5Telegram Channel avatar size/dimensions
from us


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