我想了解下面java中的線程同步是代碼中有一個名稱爲Interview的主類。在該類我創建兩個對象不能在java中同步方法
public class Interview{
/**
* @param args the command line arguments
* @throws java.lang.InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
// TODO code application logic here\
Race r1=new Race();
r1.setA(15);
Thread t1=new Thread(r1, "First thread");
Race r2=new Race();
r2.setA(25);
Thread t2=new Thread(r2, "Second thread");
t1.start();
t2.start();
}
}
有具有與名族這裏的run方法其它類的代碼
public class Race implements Runnable{
int a;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
@Override
public void run() {
try {
print();
} catch (InterruptedException ex) {
Logger.getLogger(Race.class.getName()).log(Level.SEVERE, null, ex);
}
}
public synchronized void print() throws InterruptedException{
for(int i=1;i<=10;i++){
System.out.println(a*i);
Thread.sleep(1000);
}
}
}
對於每一個對象,我給人一種不同的價值觀和然後嘗試使打印方法同步但不起作用。我正在使用的概念是兩個試圖同時訪問分片資源的線程不能通過使用同步方法來實現。所以在我的情況下,兩個線程t1和t2試圖同時訪問print方法,所以我使用print方法的synchronized關鍵字,但結果仍然是一樣的。我想要的是線程t1首先執行我,例如。 15 30 45 60 .....然後線程t2即25 50 75 ...依此類推。 如果我的概念不清楚,請糾正我。
方法不是共享資源!共享資源只能是類對象的字段。在你的例子中沒有共享資源,因爲兩個Race實例都有自己的字段a。 – isnot2bad