java - StringBuffer or synchronized method? -


i have following code:

public class mylogger {    private stringbuilder logger = new stringbuilder();     public void log(string message, string user) {       logger.append(message);       logger.append(user);    } } 

the programmer must guarantee single mylogger object works multi-threaded system. how must code changed thread-safe?

a. synchronize log method

b. replace stringbuilder stringbuffer

please advise best approach.

stringbuffer not enough guarantee 2 information sent grouped :

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

it guarantees append() not invoked in concurrent way , don't risk break state of stringbuffer object.
indeed have 2 threads interleave during log() invocation , these invocations :

thread 1 : logger.append(message);

thread 2 : logger.append(message);

thread 1 : logger.append(user);

thread 2 : logger.append(user);

this better :

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

you can synchronization on private logger object.
has advantage not allow client of class lock outside class.


Comments

Popular posts from this blog

What is happening when Matlab is starting a "parallel pool"? -

angular - DownloadURL return null in below code -

php - Cannot override Laravel Spark authentication with own implementation -