我有以下代碼。我期望一個線程完全執行其同步方法,然後允許另一個線程訪問相同的方法。然而,這種情況並非如此。爲什麼這個線程允許另一個訪問其同步方法?
public class Threads {
/**
* @param args
*/
public static void main(String[] args) {
//Thread Th = new Threads();
Thread th = new Thread (new thread1());
th.start();
Thread th1 = new Thread (new thread1());
th1.start();
}
}
class thread1 implements Runnable{
String name = "vimal";
public void run() {
System.out.println("Runnable "+this.name);
setNAme("Manish");
}
public synchronized void setNAme(String name){
try {
System.out.println("Thread "+Thread.currentThread().getName());
wait(1000);
this.name = name;
System.out.println("Name "+this.name);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我有一個輸出
Runnable vimal
Thread Thread-0
Runnable vimal
Thread Thread-1
Name Manish
Name Manish
什麼用這裏同步,如何讓我的方法完全運行另一個訪問之前?
wait方法真的無關與兩個不同的對象同步。但是,當然如果他只使用一個對象,這也會有問題。 – Gandalf
你是對的,我跳過槍回答那個。當然,這是當同一個對象完成同步時,他會遇到的下一個錯誤。 – Robin