StringBuilder はスレッドアンセーフなクラスです。
StringBuffer 内のメソッドは同期されているため、スレッドセーフです。
今日は、それをテストするコードを書きました。ループを使用して 10 個のスレッドを開き、StringBuffer (StringBuilder) の追加を呼び出して 1 から 10 を加算します。
結果は予想通りです: スレッドセーフでない StringBuilder はいくつかの数値を欠落します。
このとき:ビルダーとバッファーを同時に操作し、最初にバッファーの追加を呼び出すと、ビルダーとバッファーは同じスレッド内にあるため、各操作が実行され、ビルダーのメソッドは「同期」メソッドに変わります。バッファがスレッドをブロックするため、同様に 10 個の数字を追加しますpublic static void main(String[] args) throws InterruptedException { StringBuffer buffer = new StringBuffer(); StringBuilder builder = new StringBuilder(); // 开启十个线程,分别对buffer 和 builder 操作 for(int i = 0; i < 10; i++) { int j = i; new Thread(new Runnable() { public void run() { try { Thread.sleep(500); //造成阻塞 } catch (InterruptedException e) { e.printStackTrace(); } builder.append(j); } }).start(); } //等待以上操作完成 Thread.sleep(1000); // 打印结果 System.out.println("builder:"+builder); }
。
以上が同期メソッドは非同期メソッドにどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。