首页 > 解决方案 > 字符串缓冲区线程安全

问题描述

众所周知,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());
                }
            }
        }

}

标签: javastringbuffer

解决方案


推荐阅读