1. 程式人生 > >java多執行緒之休眠(sleep)

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,其他未測試),資料發 生變化,可能會導致鎖的不是同一個記憶體地址(實體地址)的物件值;迴圈內休眠和迴圈外休眠不一樣!!!!