线程和字符串生成器

问题描述 投票:-1回答:1

我有此代码,应该输出字符串长度= 10000,但是我不断得到不同的输出,并且我对它到底是怎么发生感到困惑?这是因为例如线程1将追加95次,然后另一个线程将中断线程1,例如:线程2,然后线程2将追加98,直到被t3等中断。

public class HelloWorld {

    public static void main(String[] args) throws InterruptedException {
        final int Z = 100;
        StringBuilder sBuilder = new StringBuilder();
        Thread[] mythread = new Thread[Z];
        for (int i = 0; i < Z; i++) {
            mythread[i] = new Thread(new Runnable() {
                public void run() {
                    for (int i = 0; i < Z; i++) {
                        sBuilder.append("W");
                    }
                }

            });
        }
        for (int i = 0; i < Z; i++) {
            mythread[i].start();
        }
        for (int i = 0; i < Z; i++) {
            mythread[i].join();
        }
        System.out.println("The str langth is: " + sBuilder.length());
    }
}

我有此代码,应该输出字符串长度= 10000,但是我不断得到不同的输出,并且我对它到底是怎么发生感到困惑?是因为例如线程1将追加...

java multithreading concurrency
1个回答
0
投票

StringBuilder不是线程安全的。您不能从并发线程中使用一个。

© www.soinside.com 2019 - 2024. All rights reserved.