java的一些基礎啊

  1. 多線程中使用靜態方法或者靜態類會不會有線程安全問題呢?
public class Test
{
   public static String hello(String str)
   {
       String tmp = "";
       tmp = tmp + str;
       return tmp;
   }
}

靜態方法如果沒有使用靜態變量,則沒有線程安全問題。
爲什麼呢?因爲靜態方法內聲明的變量,每個線程調用時,都會新創建一份,而不會共用一個存儲單元。比如這裏的tmp,每個線程都會創建自己的一份,因此不會有線程安全問題。
注意:靜態變量,由於是在類加載時佔用一個存儲區,每個線程都是共用這個存儲區的,所以如果在靜態方法裏使用了靜態變量,這就會有線程安全問題!

  1. String 字符串常量
    StringBuffer 字符串變量(線程安全)
    StringBuilder 字符串變量(非線程安全)
    詳解:
    String 類型和 StringBuffer 類型的主要性能區別其實在於 String 是不可變的對象, 因此在每次對 String 類型進行改變的時候其實都等同於生成了一個新的 String 對象,然後將指針指向新的 String 對象,所以經常改變內容的字符串最好不要用 String ,因爲每次生成對象都會對系統性能產生影響,特別當內存中無引用對象多了以後, JVM 的 GC 就會開始工作,那速度是一定會相當慢的。StringBuffer 上的主要操作是 append 和 insert 方法,可重載這些方法,以接受任意類型的數據。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章