• <xmp id="miewm"><strong id="miewm"></strong>
  • 成都java開發培訓
    達內成都高升橋中心

    Java線程同步簡介

    • 時間:2018-09-17 10:41
    • 發布:成都Java培訓
    • 來源:成都達內

    一、方法介紹

    1、void wait()

    使得線程進入等待狀態,直到它被其他線程通過notify()或者notifyAll喚醒。該方法只能在同步方法(void synchronized methodName( args... ){ ... })或者 “同步塊內部“ (synchronized(object){ ... })被調用。如果當前線程不是鎖的持有者,該方法會拋出一個IllegalMonitorStateException異常。

    即如果鎖住的是object,那么你只能調用object的wait()方法。

    2、void notify()

    隨機選擇一個在該對象上調用wait方法的線程,解除其阻塞狀態。該方法只能在同步方法(void synchronized methodName( args... ){ ... })或者 “同步塊內部“ (synchronized(object){ ... })被調用。如果當前線程不是鎖的持有者,該方法會拋出一個IllegalMonitorStateException異常。

    3、void notifyAll()

    解除所有那些在該對象上調用wait方法的線程的阻塞狀態。該方法只能在同步方法(void synchronized methodName( args... ){ ... })或者 “同步塊內部“ (synchronized(object){ ... })被調用。如果當前線程不是鎖的持有者,該方法會拋出一個IllegalMonitorStateException異常。

    二、范例講解( 注意測試類A只能聲明為外部類,下面代碼在 class A 和 main方法 之間 省略了MainClass { ... } )

    1、“同步塊”測試

    (1)加synchronized(){}

    class A{}

    public static void main(String[] args) {

    A object = new A();

    System.out.println("Main Thread Id = " + Thread.currentThread().getId());

    synchronized (object) {

    try {

    System.out.println("This Thread Id = " + Thread.currentThread().getId());

    object.wait();

    } catch (InterruptedException e) {

    </span>e.printStackTrace();

    }

    }

    }

    輸出

    (2)不加synchronized(){}

    class A{}

    public static void main(String[] args) {

    A object = new A();

    System.out.println("Main Thread Id = " + Thread.currentThread().getId());

    //synchronized (object) {

    try {

    </span>System.out.println("This Thread Id = " + Thread.currentThread().getId());

    </span>object.wait();

    } catch (InterruptedException e) {

    </span>e.printStackTrace();

    }

    /

    上一篇:java世界學習地圖
    下一篇:dao、pojo及javabean
    選擇城市和中心
    江西省

    貴州省

    廣西省

    海南省

    偷拍初高中女厕所视频