gpt4 book ai didi

java - StringBuffer 还是同步方法?

转载 作者:行者123 更新时间:2023-12-01 20:16:07 29 4
gpt4 key购买 nike

我有以下代码:

public class MyLogger {
private StringBuilder logger = new StringBuilder();

public void log(String message, String user) {
logger.append(message);
logger.append(user);
}
}

程序员必须保证单个 MyLogger 对象可以正常工作多线程系统。必须如何将此代码更改为线程安全的?

A.同步日志方法

B.将 StringBuilder 替换为 StringBuffer

请告知最佳方法。

最佳答案

StringBuffer 不足以保证这两个信息始终分组发送:

  logger.append(message);
logger.append(user);

它仅保证 append() 不会以并发方式调用,因此您不会冒破坏 StringBuffer 对象状态的风险。
您确实可以有两个线程在 log() 调用期间交错并获取这些调用:

Thread 1 : logger.append(message);

Thread 2 : logger.append(message);

Thread 1 : logger.append(user);

Thread 2 : logger.append(user);

这样好多了:

  public synchronized void log(String message, String user) {
logger.append(message);
logger.append(user);
}

您还可以在私有(private)logger对象上进行同步。
其优点是不允许类的客户端将其锁定在类之外。

关于java - StringBuffer 还是同步方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45763073/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com