我跑以下代碼:同步方法,而使用的等待()
class Counter extends Thread {
static int i=0;
//method where the thread execution will start
public void run(){
//logic to execute in a thread
while (true) {
increment();
}
}
public synchronized void increment() {
try {
System.out.println(this.getName() + " " + i++);
wait(1000);
notify();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//let’s see how to start the threads
public static void main(String[] args){
Counter c1 = new Counter();
Counter c2 = new Counter();
c1.setName("Thread1");
c2.setName("Thread2");
c1.start();
c2.start();
}
}
是此代碼的結果(添加的行編號):
1: Thread1 0
2: Thread2 1
3: Thread2 2
4: Thread1 3
5: Thread2 4
6: Thread1 4
7: Thread1 5
8: Thread2 6
stopping...
由於增量方法是同步的並且由於其包含等待(1000)我沒有預料到: 1.線程2打印2個連續打印:行2,3 我預計線程交錯他們的打印 2.在第5,6行我仍然是4.
任何人都可以給我一個解釋嗎?
代碼或者你需要是常見的兩種'Thread'情況下,在同一對象上同步。爲此靜態方法看起來像一個黑客。 – Gray
@Gray - 是的,添加了更新 –