synchronized method(){}
表示锁住该类对象上的所有同步方法...static synchronized method(){}
书上写的是"static methods can be synchronized, using the lock from the
java.lang.Class instance representing that class."我不明白这个什么意思...但是我知道这两个肯定锁的是不同对象...
谁能帮我解释一下?
表示锁住该类对象上的所有同步方法...static synchronized method(){}
书上写的是"static methods can be synchronized, using the lock from the
java.lang.Class instance representing that class."我不明白这个什么意思...但是我知道这两个肯定锁的是不同对象...
谁能帮我解释一下?
对于非static方法,用synchronized是属于对象锁
对于static方法,用synchronized是属于类锁
对象锁我想你已经明白了
对于类锁,如下(其实差不多,只是锁不同):class A
{
public static synchronized void f()
{
} public static synchronized void g()
{
}
}若某一线程取得了A类的锁,则其可以调用A.f()或A.g(),其他线程此时则不能调用这俩个方法,等待前面的线程释放锁
不是,非static的synchronized方法是属于对象锁,每个实例都有一个锁
static的synchronized方法属于类锁,每个类只有一个锁这是属于不同的锁,如果你取得了A类的类锁,其他线程就不能调用A类的static的synchronized方法,其他方法不受影响
如果你取得了某个实例a的锁,其他线程就不能调用a里的非static的synchronized方法,但是其他对象(如b)就不受影响,a里的其他方法也不受影响