2016-06-12 89 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是安全的,因爲它是本地的方法,並且不會轉義到任何其他線程。