KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
The question I am asking is related to Difference between StringBuilder and StringBuffer but not the same. I want to see what really happens if a StringBuilder is modified by two threads at the same time. I wrote the following classes: public class ThreadTester { public static void main(String[] args) throws InterruptedException { Runnable threadJob = new MyRunnable(); Thread myThread = new Thread(threadJob); myThread.start(); for (int i = 0; i < 100; i++) { Thread.sleep(10); StringContainer.addToSb("a"); } System.out.println("1: " + StringContainer.getSb()); System.out.println("1 length: " + StringContainer.getSb().length()); } } public class MyRunnable implements Runnable { @Override public void run() { for (int i = 0; i < 100; i++) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } StringContainer.addToSb("b"); } System.out.println("2: " + StringContainer.getSb()); System.out.println("2 length: " + StringContainer.getSb().length()); } } public class StringContainer { private static final StringBuffer sb = new StringBuffer(); public static StringBuffer getSb() { return sb; } public static void addToSb(String s) { sb.append(s); } } Initially I kept a StringBuffer in the StringContainer. Since StringBuffer is thread-safe, at a time, only one thread can append to it, so the output is consistent - either both threads reported the length of the buffer as 200, like: 1: abababababababababbaabababababababbaababababababababababababbabaabbababaabbaababababbababaab
Tags (comma-separated)
Save Edits
Cancel