synchronized,线程,资源的关系
//synohronized的三种使用方式
//1.实例方法
public synchronized void foo1(){
//do something...
}
synchronizd修饰在实例方法上,当前线程锁的是调用这个方法的实例
锁的持有者:当前线程
锁的资源:调用该方法的实例
//2.静态方法
public static synchronized void foo2(){
//do something...
}
synchronized修饰在静态方法上,当前线程锁的是该类的Class对象
锁的持有者:当前线程
锁的资源:该方法所在类的类对象
//3.代码块
public void foo(){
synchronized(?){
//do something...
}
}
锁的持有者:当前线程
锁的资源:由开发者指定,可以是类对象xx.class,也可以是实例对象this
如果对某一共享资源进行锁定,那么线程在竞争这个资源时必须持有了该资源的锁,才能够对该资源进行访问,否则将进入阻塞等待状态。