私はIBM developerworksサイトからのスレッドチュートリアルを読んでいました。その中で、彼らはsynchronizedキーワードと、コードのブロックではなく、実際のオブジェクトによって同期されたコードブロックがどのようにロックされるかについて話しました。著者が同期として静的クラスのThingie
のsetLastAccess
方法が記載されているにもかかわらず、それらは異なる値を使用しているため、その下に定義された2つのスレッドがそれぞれ、同時にsetLastAccess
を呼び出すことができると述べている次のコードで例えば同期化されたキーワードとJavaの静的クラス
、あなたのために。しかし、仮面が静的であれば、彼らは同じ価値を使用しているという意味ではありませんか?
同じオブジェクトを参照していても、変数名が異なるだけでよい場合はありますか?
public class SyncExample {
public static class Thingie {
private Date lastAccess;
public synchronized void setLastAccess(Date date) {
this.lastAccess = date;
}
}
public static class MyThread extends Thread {
private Thingie thingie;
public MyThread(Thingie thingie) {
this.thingie = thingie;
}
public void run() {
thingie.setLastAccess(new Date());
}
}
public static void main() {
Thingie thingie1 = new Thingie(),
thingie2 = new Thingie();
new MyThread(thingie1).start();
new MyThread(thingie2).start();
}
}
私はそれが変数の名前に依存しないと確信しています。同期化は、変数ではなく実際のオブジェクトに対する呼び出しです。 –
http://stackoverflow.com/questions/578904/how-do-synchronized-static-methods-work-in-javaに関連する – Gray
私の答えはあなたを@larryqに助けましたか?もしそうなら、それを受け入れてください。 – Gray