有下列程式:
public class String {
public String toString(){
StringBuffer buffer=new StringBuffer();
buffer.append(‘<‘);
buffer.append(this.name);
buffer.append(‘>’);
return buffer.toString();
}
}
下列敘述何者為真?(請勾選出一項)
( )A. 這段程式不是thread-safe
( )B. 程式人員可以將StringBuffer 改為StringBuilder,而不會改變程式的執行
( )C. 要讓程式更有效率的話,這段程式應改為:rewritten: return”<“+ this.name+”>”;
( )D. 程式若改用 StringBuilder,也不會加強執行效率。
答案是A?,超奇怪的!
因為課本Java物件導向程式設計與SCJP認證明解在運用String、Date及包裝類別的StringBuffer、StringBuilder類別這節裡,提到「StringBuffer提供的方法都是執行緒安全(Thread-safe)的」,那A怎會是對的?我倒覺得檔案B較對!
我想當toString被呼叫時,因為沒有synchronized,所以this.name有機會被其他thread修改,所以不是thread safe。