熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

Java多線程程序設計二十三個要點[2]

2013-11-23 19:57:07  來源: Java高級技術 

    線程堵塞Blocked有幾個原因造成

    ()線程在等候一些IO操作

    ()線程試圖調用另外一個對象的同步方法但那個對象處於鎖定狀態暫時無法使用

    原子型操作(atomic) 對原始型變量(primitive)的操作是原子型的atomic 意味著這些操作是線程安全的 但是大部分情況下我們並不能正確使用來看看 i = i + i是int型屬於原始型變量

    ()從主內存中讀取i值到本地內存

    ()將值從本地內存裝載到線程工作拷貝中

    ()裝載變量

    ()將i 加

    ()將結果給變量i

    ()將i保存到線程本地工作拷貝中

    ()寫回主內存

    注意原子型操作只限於第步到第步的讀取以及第到第步的寫 i的值還是可能被同時執行i=i+的多線程中斷打擾(在第步)

    double 和long 變量是非原子型的(nonatomic)數組是object 非原子型

    由於條的原因我們解決辦法是

 
class xxx extends Thread{
  //i會被經常修改
 private int i;
 public synchronized int read(){ return i;}
 public synchronized void update(){ i = i + ;}
 
 }

[]  []  []  []  


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27707.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.