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不可能被多个线程使用。