java多執行緒之休眠(sleep)
多執行緒之休眠(sleep())
sleep()方法會使當前執行緒由執行狀態進入到休眠(阻塞)狀態同時讓出CPU資源,休眠結束後,就會由阻塞狀態變為就緒狀態,競爭CPU資源,整個過程都會持有物件鎖——(當前執行緒的程式碼會執行完畢,然後執行sleep()方法所線上程程式碼)——(相當於非同步阻塞)
private static List obj = new ArrayList<>(10);
@Override
public void run() {
synchronized (obj){
for(int i=0;i<10;i++){
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
obj.add(“123”);
System.out.println(Thread.currentThread().getName()+”—-“+i);
}
}
}
public static void main(String[] args) {
thread3 t = new thread3();
Thread threa = new Thread(t);
Thread threaa = new Thread(t);
threa.start();
threaa.start();
}
結果:Thread-0—-0
Thread-0—-1
Thread-0—-2
Thread-0—-3
Thread-0—-4
Thread-0—-5
Thread-0—-6
Thread-0—-7
Thread-0—-8
Thread-0—-9
Thread-1—-0
Thread-1—-1
Thread-1—-2
Thread-1—-3
Thread-1—-4
Thread-1—-5
Thread-1—-6
Thread-1—-7
Thread-1—-8
Thread-1—-9注意:鎖的物件不能使用基本資料型別的包裝型別(如:Integer,其他未測試),資料發 生變化,可能會導致鎖的不是同一個記憶體地址(實體地址)的物件值;迴圈內休眠和迴圈外休眠不一樣!!!!