2016-06-12 91 views
2

我使用这个:线程不安全的对象

@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不是线程安全的,它是安全的它的线程安全的,​​方法中使用?我的猜测是,它是,因为对象本身在本地和线程安全的方法。

+1

你的方法是线程安全的,因为它是同步的,并且由于变量是本地的,所以其他线程无法访问除当前执行该方法的线程之外的局部变量。 – SomeDude

+0

“线程安全”意味着该对象可以同时被_two或more_线程安全地使用。在您的示例中,没有可能让StringBuilder被多个线程使用。 –

回答

4

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