網頁

2017/10/12

Java 執行緒 synchronized method

若將方法宣告為synchronized method,則執行緒在呼叫此方法時會取得的這個物件的鎖。


下面範例將PrintLoopprint()方法宣告synchronized method,所以一次只會有一條執行緒執行該物件的方法。

public class Test {

  public static void main(String[] args) {
    
    PrintLoop pl = new PrintLoop();
    
    Thread a = new Thread(() -> {
      String threadName = Thread.currentThread().getName();
      pl.print(threadName, 5);
    }, "A");
    
    Thread b = new Thread(() -> {
      String threadName = Thread.currentThread().getName();
      pl.print(threadName, 5);
    }, "B");
    
    a.start();
    b.start();
  }

}

class PrintLoop{
  public synchronized void print(String threadName, int times){
    System.out.println(threadName + ":print start");
    for(int i = 0; i < times; i++){
      System.out.println(threadName + ":" + i);
    }
    System.out.println(threadName + ":print end");
  }
}

執行結果。

A:print start
A:0
A:1
A:2
A:3
A:4
A:print end
B:print start
B:0
B:1
B:2
B:3
B:4
B:print end

沒有留言:

張貼留言