sleepとwaitは割り込みに応答できる

3329 ワード

sleepとwaitの違い:
1.sleepメソッドはスレッド静的メソッドであり、waitメソッドはObjectオブジェクトメソッドである.
2.sleepはスレッドをスリープさせ、ロックを解放しない.waitメソッドは、ロックを取得した場合に待機し、待機時にロックを解放する.
3.割り込みに応答できます.
public class Test {

    static Object lock = new Object();
    
    public static void main(String[] args) {
        // 
        Thread t = new Thread(() -> {
            System.out.println(" ");
            long s = System.currentTimeMillis();
            try {
                Thread.sleep(100000);
            } catch (InterruptedException e) {
                System.out.println(" 2 " + (System.currentTimeMillis() - s));
            }
        });
        t.start();
        System.out.println(" ");
        t.interrupt();
        
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
        }
        
        //wait 
        System.out.println("-----------wait---------");
        Thread t1 = new Thread(() -> {
            
            synchronized(lock) {
                System.out.println(" ");
                long s = System.currentTimeMillis();
                try {
                    lock.wait();
                } catch (InterruptedException e) {
                    System.out.println(" wait1 " + (System.currentTimeMillis() - s));
                }
            }
            
            
        });
        t1.start();
        System.out.println(" wait");
        t1.interrupt();
    }

}

出力:
 
 
 2 0
-----------wait---------
 wait
 
 wait1 0