1. 程式人生 > >Java:程式碼驗證 StringBuffer 執行緒安全,StringBuilder 非執行緒安全

Java:程式碼驗證 StringBuffer 執行緒安全,StringBuilder 非執行緒安全

本文內容大多基於官方文件和網上前輩經驗總結,經過個人實踐加以整理積累,僅供參考。

首先需要明白什麼是執行緒安全,什麼是非執行緒安全,引用百度百科
這裡寫圖片描述

下面用程式碼進行驗證:
1 定義一個執行緒類,迴圈執行 StringBuffer 和 StringBuilder 的 append 方法,執行一次執行緒休眠 10 毫秒

class CustomThread extends Thread {
    private StringBuffer buffer;
    private StringBuilder builder;

    public CustomThread(StringBuffer buffer, StringBuilder builder) {
        this
.buffer = buffer; this.builder = builder; } @Override public void run() { for (int i = 0; i < 1000; i++) { buffer.append("A"); builder.append("Z"); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("StringBuffer Size:"
+ buffer.length() + " | " + "StringBuilder Size:" + builder.length()); } }

2 定義測試方法,迴圈新建 10 個執行緒類並呼叫 start 方法

public static void main(String[] args) {
    StringBuffer buffer = new StringBuffer();
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < 10
; i++) { new CustomThread(buffer, builder).start(); } }

3 測試結果,10個執行緒,每個執行緒迴圈1000次,如果執行緒安全則全部執行完成後字串長度應該都是 10 * 1000 = 10000,測試結果中顯示 StringBuffer 最終長度的確是 10000,StringBuilder 最大長度只有9956,說明 StringBuilder 非執行緒安全
這裡寫圖片描述