StringBuffer известен как поточно-ориентированный в Java, что означает, что он обеспечивает синхронизированный доступ ко многим потокам. Но когда я запускаю приведенный ниже код, он не запускается так же, как в блоке синхронизации. Что мне здесь не хватает?
class Hackerearth{
static StringBuffer s = new StringBuffer("String Buffer Multithreading test");
public static void main(String args[] ) throws Exception {
Thread t1 = new Thread(new Runnable(){
public void run(){
Thread1();
}
});
Thread t2 = new Thread(new Runnable(){
public void run(){
Thread2();
}
});
t1.start();
t2.start();
}
public static void Thread1(){
for(int i = 0; i < s.length(); i++){
s.setCharAt(i, ((char) ((int) (Math.random() * 26) + 97)));
System.out.println("Thread is: " + Thread.currentThread().getName() + ".S is: " + s);
if(i == s.length() - 1){
try {
Thread.sleep(2000);
s = new StringBuffer("String Buffer Multithreading test");
} catch (InterruptedException ex) {
System.out.println(ex.getMessage());
}
}
}
}
public static void Thread2(){
for(int i = 0; i < s.length(); i++){
s.setCharAt(i, ((char) ((int) (Math.random() * 26) + 97)));
System.out.println("Thread is: " + Thread.currentThread().getName() + ".S is: " + s);
if(i == s.length() - 1){
try {
Thread.sleep(2000);
s = new StringBuffer("String Buffer Multithreading test");
} catch (InterruptedException ex) {
System.out.println(ex.getMessage());
}
}
}
}