若將方法宣告為synchronized method,則執行緒在呼叫此方法時會取得的這個物件的鎖。
下面範例將PrintLoop
的print()
方法宣告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
沒有留言:
張貼留言