Java中的wait方法 簡單介紹。


一 wait方法怎么用?

package com.aaa.threaddemo;
/*
 * 多線程中的wait方法?    
    public final void wait() throws InterruptedException {
        wait(0);
    }
    
  1  隸屬於object,因為Java希望把並發控制做到每一個Object里 
  2  調用wait方法,線程會放棄對象鎖,進入等待此對象的等待對象池。
  3  只有針對此對象調用notify方法后,本線程才進入對象鎖定池,准備獲取對象鎖,進行運行狀態。否則就是一直掛起狀態。
    
    
 * 
 * 
 */
public class WaitDemo {
    public static void main(String[] args) throws InterruptedException {
        
        // 新建兩個線程 測試wait方法。
        new Thread(new Runnable() {
            public void run() {
                // 4.synchronized后面括號里是類,此時,線程獲得的是對象鎖.
                synchronized (WaitDemo.class) {
                    try {
                        System.out.println("線程一開始");
                        
                        //wait 方法 線程會放棄對象鎖,進入等待此對象的等待鎖定池,此時線程掛起。
                        WaitDemo.class.wait();
                    } catch (InterruptedException e) {
                            e.printStackTrace();
                    }
                    System.out.println("線程一結束");
                }
                
            }
        }).start();
        
        new Thread(new Runnable() {
            public void run() {
                synchronized (WaitDemo.class) {
                    System.out.println("線程二開始");
                    
                    //只有針對此對象調用notify方法后,本線程才進入對象鎖定池,准備獲取對象鎖,進入運行狀態。
                    //如果不調用這個方法,線程永遠都是刮起的狀態。
                    WaitDemo.class.notify();
                    System.out.println("線程二結束了");
                }
                
            }
        }).start();    
    }

}

 

 

 

二 測試notify的作用

package com.aaa.threaddemo;
/*
 * 多線程中的wait方法?    
    public final void wait() throws InterruptedException {
        wait(0);
    }
    
  1  隸屬於object,因為Java希望把並發控制做到每一個Object里 
  2  調用wait方法,線程會放棄對象鎖,進入等待此對象的等待對象池。
  3  只有針對此對象調用notify方法后,本線程才進入對象鎖定池,准備獲取對象鎖,進行運行狀態。否則就是一直掛起狀態。
    
    
 * 
 * 
 */
public class WaitDemo {
    public static void main(String[] args) throws InterruptedException {
        
        // 新建兩個線程 測試wait方法。
        new Thread(new Runnable() {
            public void run() {
                // 4.synchronized后面括號里是類,此時,線程獲得的是對象鎖.
                synchronized (WaitDemo.class) {
                    try {
                        System.out.println("線程一開始");
                        
                        //wait 方法 線程會放棄對象鎖,進入等待此對象的等待鎖定池,此時線程掛起。 
                        WaitDemo.class.wait();
                    } catch (InterruptedException e) {
                            e.printStackTrace();
                    }
                    System.out.println("線程一結束");
                }
                
            }
        }).start();
        
        new Thread(new Runnable() {
            public void run() {
                synchronized (WaitDemo.class) {
                    System.out.println("線程二開始");
                    
                    //只有針對此對象調用notify方法后,本線程才進入對象鎖定池,准備獲取對象鎖,進入運行狀態。
                    //如果不調用這個方法,線程永遠都是刮起的狀態。
//                    WaitDemo.class.notify();
                    System.out.println("線程二結束了");
                }
                
            }
        }).start();    
    }

}

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM