Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 线程安全方法中的线程不安全对象_Java_Multithreading - Fatal编程技术网

Java 线程安全方法中的线程不安全对象

Java 线程安全方法中的线程不安全对象,java,multithreading,Java,Multithreading,我用这个: @Override public synchronized void catchException(String logTag, Exception e) { StringBuilder trace = new StringBuilder(e.toString() + "\n"); for (StackTraceElement el : e.getStackTrace()) { trace.append("\t\t at " + el.toStri

我用这个:

@Override
public synchronized void catchException(String logTag, Exception e) {

    StringBuilder trace = new StringBuilder(e.toString() + "\n");

    for (StackTraceElement el : e.getStackTrace()) {
        trace.append("\t\t at " + el.toString() + "\n");
    }

    write(logTag, trace.toString(), EXCEPTION);
}

既然
StringBuilder
不是线程安全的,那么在线程安全的
synchronized
方法中使用它安全吗?我的猜测是,它是,因为对象本身是本地的,并且在方法内部是线程安全的。

是的,使用
StringBuilder
是安全的,因为它对于方法是本地的,并且不会转义到任何其他线程。

您的方法是线程安全的,因为它是同步的,因为变量是本地的,除了执行该方法的当前线程外,其他线程无法访问该局部变量。“线程安全”意味着两个或多个线程可以同时安全地使用该对象。在您的示例中,StringBuilder不可能被多个线程使用。