成都java開發培訓
達內成都高升橋中心

18011516507

熱門課程

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
選擇城市和中心
江西省

貴州省

廣西省

海南省

偷拍初高中女厕所视频