Sample41 is run - what will be the output?
public class Sample41
{
static final StringBuilder LOG = new StringBuilder();
public static void main(String[] args) throws InterruptedException
{
Runnable job = () -> { for (int i = 0; i < 1000; i++) LOG.append('x'); };
Thread a = new Thread(job), b = new Thread(job);
a.start(); b.start(); a.join(); b.join();
System.out.println(LOG.length());
}
}
Answer: A
StringBuilder makes no attempt at thread safety, so two threads appending concurrently can corrupt its internal length and array; the result may be short, or an ArrayIndexOutOfBoundsException from inside append. The joins order the print but cannot repair the damage. StringBuffer, or a lock, is what makes it safe.
Please log in or register to report this question.