我有一個類TestLogger
,它有一個void方法log(String s)
,它可以被多個線程訪問。這裏是我的代碼Java多線程:線程安全數據結構與同步方法
public class TestLogger {
private static final StringBuffer buffer = new StringBuffer();
public static void log(String s) {
buffer.append(s);
}
}
我不知道在這裏如果我使用的線程安全類StringBuffer
,我還需要把synchronized關鍵字的方法log(String)
,以確保該方法的線程安全?這種方法怎麼樣
public static void log(String s, int type) {
if (type == 0)
buffer.append(s);
if (type == 1)
buffer.append("SOME HEADER " + s);
}
這裏類型沒有在方法日誌中修改。我需要使用synchronized關鍵字嗎?
在Java中,同步關鍵字和線程安全類都可以提供線程安全性。我不確定何時使用其中一個和另一個?
如果使用緩衝區,則不需要同步,如果某些內容是「線程安全」,則一般規則可能使用同步本身 –