为什么StringBuilder访问似乎是同步的?

这个问题在这里已经有了答案:

  • StringBuilder和StringBuffer之间的区别31个答案

  • 您正在使用每个线程的StringBuffers和StringBuilders的diferents实例。 要查看同步,您必须在所有线程中使用相同的对象实例;-)


    对预期行为和实际行为的描述会有所帮助,但我猜测你看到了每个线程的顺序输出,但是预计会看到来自不同线程的交错输出。

    线程调度取决于系统。 不能保证线程将被公平地调度(例如,获得“时间片”的同等优先级的线程),或者即使在多处理器系统上线程也将并发运行。

    此外,请记住System.out.println()是同步的,并且不保证内部锁的争用可以公平或立即解决。 所以有可能一个线程反复获取System.out上的锁定,并且其他线程在该线程完成之前没有机会打印。 您可以使用java.util.concurrent.ReentrantLock获得“公平”锁定(可能会损害性能)。

    另一种可能性是你的系统速度如此之快,以至于一个线程在下一个线程尝试开始运行之前就结束了。 更多的迭代将有助于检测这种情况。


    你应该已经为所有线程使用了相同的StringBuilder / StingBuffer实例。 以便您可以看到同步。

    链接地址: http://www.djcxy.com/p/72345.html

    上一篇: Why does StringBuilder access appear to be synchronized?

    下一篇: Wha's special in using StringBuilder insted of StringBuffer