java中的安全執行緒

來源:互聯網
上載者:User

標籤:this   安全執行緒   ==   cells   equals   hash   als   直接   如何   

難道我們只能單純的背java的那個類是安全執行緒的,那個類不是安全執行緒的嗎?
這和授人以魚有何區別呢?難道就沒有一種方法授人以漁?直接教我們如何去判斷一個類是否是安全執行緒的?
java中的安全執行緒是什麼:
就是線程同步的意思,就是當一個程式對一個安全執行緒的方法或者語句進行訪問的時候,其他的不能再對他進行操作了,必須等到這次訪問結束以後才能對這個安全執行緒的方法進行訪問
什麼叫安全執行緒:
如果你的代碼所在的進程中有多個線程在同時運行,而這些線程可能會同時運行這段代碼。如果每次運行結果和單線程啟動並執行結果是一樣的,而且其他的變數的值也和預期的是一樣的,就是安全執行緒的。 
或者說:一個類或者程式所提供的介面對於線程來說是原子操作或者多個線程之間的切換不會導致該介面的執行結果存在二義性,也就是說我們不用考慮同步的問題。
安全執行緒問題都是由全域變數及靜態變數引起的。
若每個線程中對全域變數、靜態變數只有讀操作,而無寫操作,一般來說,這個全域變數是安全執行緒的;若有多個線程同時執行寫操作,一般都需要考慮線程同步,否則就可能影響安全執行緒。
看過vector源碼的同學就會知道他的許多操作都是加了synchronized修飾的比如他的添加元素。(不知道synchronized是什麼意思的自行百度!)

123 public synchronized void addElement(E obj) {  modCount++;       ensureCapacityHelper(elementCount + 1);  elementData[elementCount++] = obj;}

而HashMap的所有操作都沒有加synchronized修飾 ,不如他的put源碼

12345678910111213141516171819 public V put(K key, V value) {     if (key == null)         return      putForNullKey(value);      int hash = hash(key.hashCode());      int i = indexFor(hash, table.length);      for(Entry<K,V> e = table[i]; e != null; e = e.next) {         Object k;         if (e.hash == hash &&((k = e.key) == key || key.equals(k))) {             V oldValue = e.value;             e.value = value;             e.recordAccess(this);             return             oldValue;    }     }     modCount++;     addEntry(hash, key, value, i);     return null; }

再看看ArrayList的add方法的源碼

12345 public boolean add(E e) {     ensureCapacity(size + 1);  // Increments modCount!!     elementData[size++] = e;     return true; }

再看StringBuffer的append源碼,他是有synchronized修飾的

12345 public synchronized  StringBuffer append(String str) {     super.append(str);     return this; }

最後是Properties的setProperty方法,他是有synchronized修飾的

12345 public synchronized  Object setProperty(String key, String value) {      return      put(key, value); }

由此就可以判斷出誰是安全執行緒的了。

java中的安全執行緒

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.