以上這段程序中的 i 變量並不是共享數據也就是這裡的Synchronized關鍵字並未起作用因為tt兩個線程是兩個對象(rr)的線程不同的對象其數據是不同的所以r和r兩個對象的i變量是並不是共享數據
當把代碼改成如下Synchronized關鍵字才會起作用
以下是引用片段
Runnable r = new ThreadTest();
Thread t = new Thread(r);
Thread t = new Thread(r);
tstart();
tstart();
三sleep()
使當前線程(即調用該方法的線程)暫停執行一段時間讓其他線程有機會繼續執行但它並不釋放對象鎖也就是如果有Synchronized同步塊其他線程仍然不同訪問共享數據注意該方法要捕獲異常
比如有兩個線程同時執行(沒有Synchronized)一個線程優先級為MAX_PRIORITY另一個為MIN_PRIORITY如果沒有Sleep()方法只有高優先級的線程執行完成後低優先級的線程才能執行;但當高優先級的線程sleep()後低優先級就有機會執行了
總之sleep()可以使低優先級的線程得到執行的機會當然也可以讓同優先級高優先級的線程有執行的機會
四join()
join()方法使調用該方法的線程在此之前執行完畢也就是等待調用該方法的線程執行完畢後再往下繼續執行注意該方法也要捕獲異常
[] [] []
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27721.html